che sto cercando di fare qualcosa di simile al seguenteIn Scala, come posso riassegnare i valori della tupla?
var tuple = (1, "test")
tuple._2 = "new"
Tuttavia questo non compilarlo lamenta val
che sto cercando di fare qualcosa di simile al seguenteIn Scala, come posso riassegnare i valori della tupla?
var tuple = (1, "test")
tuple._2 = "new"
Tuttavia questo non compilarlo lamenta val
Non è possibile riassegnare valori tupla. Sono intenzionalmente immutabili: una volta creata una tupla, puoi essere sicuro che non cambierà mai. Questo è molto utile per scrivere il codice corretto!
Ma cosa succede se si desidera una tupla diversa? Ecco dove il metodo di copia è disponibile in:
val tuple = (1, "test")
val another = tuple.copy(_2 = "new")
o se davvero si vuole utilizzare un var per contenere il tupla:
var tuple = (1, "test")
tuple = tuple.copy(_2 = "new")
In alternativa, se davvero, vuole veramente i valori per cambiare individualmente, è possibile utilizzare una classe caso invece (probabilmente con una conversione implicita in modo da poter ottenere una tupla quando ne avete bisogno):
case class Doublet[A,B](var _1: A, var _2: B) {}
implicit def doublet_to_tuple[A,B](db: Doublet[A,B]) = (db._1, db._2)
val doublet = Doublet(1, "test")
doublet._2 = "new"
Ciao Rex, hai menzionato qualche istante prima stavi lavorando su una libreria con tipi 'Muple' e altre raccolte mutabili. Sarebbe bello vederlo su Github! –
@Kipton Barros - Sì, non è così? Vorrei avere il tempo di finirlo. Mi sono imbattuto in un sacco di bug di specializzazione e poi ho finito il tempo per aggirarli. –
è possibile wrapper componente (s) è necessario modificare in una classe case con un var
membro, come:
case class Ref[A](var value: A)
var tuple = (Ref(1), "test")
tuple._1.value = 2
println(tuple._1.value) // -> 2
L'uso di una 'case class' sembra un po 'eccessivo, se tutto ciò che vuoi è evitare' new Ref (1) '. – jwvh
sto guardando http://www.scala-lang.org/api/current/index.html#scala.Tuple3 e ancora non riesco a vedere l'opzione di copia – deltanovember
Il metodo copy viene introdotto automaticamente perché 'Tuple3' è una' case class'. – Nicolas