Scala:元组作为变量



元组在 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

正如其他人已经指出的那样,copyTuple定义了一种方便的方法,它允许创建对象的副本(可能替换某些字段(。

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)

最新更新