2011-08-22 64 views

回答

38

你不能重新分配元組值。它們是故意不可變的:一旦你創建了一個元組,你可以確信它永遠不會改變。這對編寫正確的代碼非常有用!

但是如果你想要一個不同的元組呢?這就是複製方法就:

val tuple = (1, "test") 
val another = tuple.copy(_2 = "new") 

,或者如果你真的想用一個變種包含元組:

var tuple = (1, "test") 
tuple = tuple.copy(_2 = "new") 

或者,如果你真的想你的價值觀單獨改變,你可以使用的情況下,而不是類(可能與隱式轉換,因此您可以在需要時得到一個元組):

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" 
+0

嗨,雷克斯,你提到了一段時間你正在使用'Muple'類型和其他可變集合的庫。在Github上看到它會很棒! –

+0

@基普頓巴羅斯 - 是的,不是嗎?我希望我有時間完成它。我碰到了一堆專門化的bug,然後花時間去解決它們。 –

0

可以包裝器組件(一個或多個),你需要在一個案例類修改用var成員,如:

case class Ref[A](var value: A) 

var tuple = (Ref(1), "test") 
tuple._1.value = 2 
println(tuple._1.value) // -> 2 
+0

如果你想要避開'new Ref(1)',那麼使用'case class'似乎有點矯枉過正。 – jwvh