Scala:变量引用

Scala:变量引用,scala,reference,Scala,Reference,在Scala中,如何将一个变量引用到另一个变量?例如 import scala.collection.mutable.Set var a = Set(1) var b = a a = a + 2 // a = Set(1, 2) // b = Set(1) 我想让b指向“更新的”a让我们看看发生了什么: scala> var a = Set(1) a: scala.collection.mutable.Set[Int] = Set(1) scala> var b = a b: s

在Scala中,如何将一个变量引用到另一个变量?例如

import scala.collection.mutable.Set
var a = Set(1)
var b = a
a = a + 2
// a = Set(1, 2)
// b = Set(1)

我想让
b
指向“更新的”
a

让我们看看发生了什么:

scala> var a = Set(1)
a: scala.collection.mutable.Set[Int] = Set(1)

scala> var b = a
b: scala.collection.mutable.Set[Int] = Set(1)

scala> a eq b
res9: Boolean = true
这意味着这两个变量引用相同的值(在本例中,是可变引用,因为您使用了
var

现在让我们看看如果我们执行
a=a+2
,会发生什么:

scala> a = a + 2
a: scala.collection.mutable.Set[Int] = Set(1, 2)

scala> a eq b
res10: Boolean = false

我们应该做的是,使用
+=
操作符,在
a+=2
的情况下,编译器将该操作符作为
a.+=(2)
(操作
+=
来自
集合
)来维护
a
的引用并进行适当的更改。如果改为执行
a=a+2
,则所做的是将
a
引用的对象更改为新的
a+2
,从而更改哈希代码。而且,由于您使用的数据结构是可变的,如果您使用
def
而不是像这样使用
var
的话,您可以使用
val
s通过不可变引用来更改可变引用。

def b = a
然后访问
b
将始终返回
a
的最新值。但最好使用
val
并按照问题的其他答案中的说明,将
设置更新到位


更好的是,考虑如何使用更具功能的样式,避免像这样随时间变化的值。

美观。我喜欢haschodes是真正的散列,我得到的是相同的+1@MikeAllen不太可能
1453501670
似乎对前照很有抵抗力。@MikeAllen你没有吗?