元组在 Scala 中是不可变的,那么为什么甚至允许将元组声明为 var 而不是总是 val?
var pair = (99, "Luftballons")
println(pair._1) // Ok
pair._1 = 89 // <console>:14: error: reassignment to val
使用 ScalaIDE Eclipse,Windows 10
谢谢
可变数据结构和可变引用之间存在差异 - 有关详细信息,请参阅此答案。
在这种特殊情况下,您使用的是对不可变数据结构的可变引用,这意味着您只能将其替换为完全不同的引用。这将起作用:
var pair = (99, "Luftballons")
println(pair._1) // Ok
pair = (100, "Luftballons") // OK
正如其他人已经指出的那样,copy
为Tuple
定义了一种方便的方法,它允许创建对象的副本(可能替换某些字段(。
pair = pair.copy(5, "Kittens") // OK
你必须像这样更新你的对:
pair = (89, pair._2)
pair: (Int, String) = (89,Luftballons)
通过对新赋值,而不是基础元组。或者你使用pair.copy,就像成波希建议的那样。
scala> pair = pair.copy(_1=101)
pair: (Int, String) = (101,Luftballons)