Scala:变量引用
在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
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你没有吗?