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