gpt4 book ai didi

scala - 了解 Scala 可变集 val 引用

转载 作者:行者123 更新时间:2023-12-05 07:40:53 25 4
gpt4 key购买 nike

在第三版《Programming in Scala》一书中,我看到了一个我看不懂的例子。为了理解它,我将它输入到 Scala 解释器中:

scala> import scala.collection.mutable
import scala.collection.mutable

scala> val movieSet = mutable.Set("Hitch", "Poltergeist")
movieSet: scala.collection.mutable.Set[String] = Set(Poltergeist, Hitch)

scala> movieSet
res3: scala.collection.mutable.Set[String] = Set(Poltergeist, Hitch) <<< res3

scala> movieSet += "Shrek"
res4: movieSet.type = Set(Poltergeist, Shrek, Hitch) <<< res4

我的理解是当在 mutable.Set 上执行 += 时,Set 应该就地发生变异(即分配给它的变量不应该改变),但引用从 res3 更改为 res4。另外,我理解“val movieSet”是为了创建一个无法更改的值。这难道不应该导致“val movieSet”保留 res3 引用,而不是更改为 res4 吗?

最佳答案

res3res4 只是对同一对象的附加引用,当您键入具有非单位返回类型的表达式但不这样做时,由 scala shell 生成t 分配给一个变量。当您执行 += 时,该方法会改变集合,并再次返回对同一对象的引用,所以这就是 res3res4 的结果向上包含。

您可以使用 eq 方法检查两个值实际上是完全相同的对象(而不是两个相等的对象)。即,res3 eq movieSetres4 eq movieSet 都应该为真。

val 限制变量始终引用同一个对象,但它不限制该对象以任何方式发生变异。

关于scala - 了解 Scala 可变集 val 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45807050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com