Scala:元组为var

时间:2018-04-10 03:38:53

标签: scala tuples

元组在Scala中是不可变的,那么为什么甚至允许将元组声明为var并且不总是val?

var pair = (99, "Luftballons") 
println(pair._1) // Ok
pair._1 = 89 // <console>:14: error: reassignment to val

使用ScalaIDE Eclipse,Windows 10

谢谢,

2 个答案:

答案 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)