2014-06-08 19 views
14

Ho una classe di caso con 2 membri di stringa. Vorrei aggiornare il secondo membro più tardi, quindi prima creo un'istanza con String e None e successivamente caricherò i dati nella classe e vorrei aggiornare il secondo membro con un certo valore.Scala valore classe di aggiornamento

Come posso farlo?

+0

Hai letto di case study? Hai provato a scrivere qualcosa? – vptheron

+1

Principalmente duplicati di http://stackoverflow.com/q/7249396/298389 –

risposta

38

definire la classe caso in modo che il secondo elemento è un var:

case class Stuff(name: String, var value: Option[String]) 

Ora è possibile creare un'istanza di Stuff e modificare il secondo valore:

val s = Stuff("bashan", None) 

s.value = Some("hello") 

Tuttavia, rendendo classi case mutabile probabilmente non è una buona idea. Si dovrebbe preferire lavorare con strutture dati immutabili. Invece di creare una case case mutevole, renderla immutabile e utilizzare il metodo copy per creare una nuova istanza con valori modificati. Ad esempio:

// Immutable Stuff 
case class Stuff(name: String, value: Option[String]) 

val s1 = Stuff("bashan", None) 

val s2 = s1.copy(value = Some("hello")) 
// s2 is now: Stuff("bashan", Some("hello")) 
+10

Ciò che trovo molto utile quando si lavorano case case immutabili è introdurre una serie di metodi 'withXYZ' per i valori più comunemente modificati. Cioè aggiungendo 'def withValue (v: String): Stuff = copy (value = Some (v))' alla definizione della classe 'Stuff' permetterebbe di creare una copia modificata nel modo seguente' s1.withValue ("ciao") ' –

1

Le classi di casi in Scala sono preferibilmente immutabili. Utilizzare una classe regolare per ciò che si sta tentando di raggiungere, oppure copiare l'oggetto classe caso in uno nuovo con il valore aggiornato.

+0

Le classi di casi non sono sempre necessariamente immutabili. – Jesper