Scala:元组作为var

Scala:元组作为var,scala,tuples,Scala,Tuples,元组在Scala中是不可变的,那么为什么它甚至可以将元组声明为var而不总是val呢 var pair = (99, "Luftballons") println(pair._1) // Ok pair._1 = 89 // <console>:14: error: reassignment to val var对=(99,“德国航空”) println(pair.\u 1)//正常 配对。_1=89/:14:错误:重新分配到val 使用ScalaIDE Eclipse、Win

元组在Scala中是不可变的,那么为什么它甚至可以将元组声明为var而不总是val呢

var pair = (99, "Luftballons") 
println(pair._1) // Ok
pair._1 = 89 // <console>:14: error: reassignment to val
var对=(99,“德国航空”)
println(pair.\u 1)//正常
配对。_1=89/:14:错误:重新分配到val
使用ScalaIDE Eclipse、Windows 10


谢谢,

您必须像这样更新您的鞋子:

pair = (89, pair._2)
pair: (Int, String) = (89,Luftballons)
通过对该对的新赋值,而不是对底层元组的赋值。或者你使用pair.copy,就像程伯希建议的那样

scala> pair = pair.copy(_1=101)
pair: (Int, String) = (101,Luftballons)

您必须按以下方式更新您的配对:

pair = (89, pair._2)
pair: (Int, String) = (89,Luftballons)
通过对该对的新赋值,而不是对底层元组的赋值。或者你使用pair.copy,就像程伯希建议的那样

scala> pair = pair.copy(_1=101)
pair: (Int, String) = (101,Luftballons)

可变数据结构和可变引用之间存在差异-有关详细信息,请参阅

在这种特殊情况下,您使用的是对不可变数据结构的可变引用,这意味着您只能用完全不同的数据结构替换它。这将有助于:

var pair = (99, "Luftballons") 
println(pair._1) // Ok
pair = (100, "Luftballons") // OK
正如其他人已经指出的那样,有一种为
Tuple
定义的方便方法
copy
,它允许创建对象的副本(可能会替换某些字段)


可变数据结构和可变引用之间存在差异-有关详细信息,请参阅

在这种特殊情况下,您使用的是对不可变数据结构的可变引用,这意味着您只能用完全不同的数据结构替换它。这将有助于:

var pair = (99, "Luftballons") 
println(pair._1) // Ok
pair = (100, "Luftballons") // OK
正如其他人已经指出的那样,有一种为
Tuple
定义的方便方法
copy
,它允许创建对象的副本(可能会替换某些字段)


拥有可变引用不会使对象可变。在本例中使用var只意味着您可以执行
pair=some_other_tuple
谢谢,而且some_other_tuple必须与pair相同类型。保存可变引用不会使对象可变。在本例中使用var只意味着您可以执行
pair=some other\u tuple
谢谢,而且some other\u tuple必须与pairhow about
pair=pair.copy(_1=89)
,:)怎么样
pair=pair.copy(_1=89)
,:)