Scala 不可变 Set 是可变的吗?
Scala immutable Set is mutable?
文档说:
A collection in package scala.collection.immutable is guaranteed to be immutable for everyone. Such a collection will never change after it is created.
但是我没有得到我期望的行为:
scala> var test3 = scala.collection.immutable.Set[String]("one", "two")
test3: scala.collection.immutable.Set[String] = Set(one, two)
scala> test3 += "three"
scala> println(test3)
Set(one, two, three)
我在这里错过了什么?
在使用集合时,有两件事要避免(如果可能的话)。如您所知,不可变集合优于可变集合。但是,将不可变集合存储在可变变量中只是 "delays" 问题。您将可变性及其带来的所有问题从集合本身转移到保存集合的变量。无论哪种方式,你都有一个状态。
理想的解决方案是避免两者。也就是说,同时使用不可变集合和不可变字段 (vals)。例如,一个函数可以生成一个不可变的集合,而其他函数可以使用它,而不必将集合本身保存在某个地方或对其进行修改。
一个var
可以重新赋值(它是一个变量,所以它可以变化)。然后您将不再引用之前的对象。
一个val
不能被重新赋值(它是一个值,所以它不能变化),但是你可以调用该对象上的方法,例如,如果值是 mutable
集。
当我说 vary 时,我的意思基本上是引用不能变化。这有点令人困惑,我知道。
换句话说:val
s 和 var
s 都可以指向具有自身可以改变的内部状态的对象。喜欢mutable地图。
我鼓励您自己编写一个代码示例来验证这一点 table:
| MutableSet | ImmutableSet
--------------------------------------------------
var | Reassign. Insert element | Reassign
val | Insert | None of these
文档说:
A collection in package scala.collection.immutable is guaranteed to be immutable for everyone. Such a collection will never change after it is created.
但是我没有得到我期望的行为:
scala> var test3 = scala.collection.immutable.Set[String]("one", "two")
test3: scala.collection.immutable.Set[String] = Set(one, two)
scala> test3 += "three"
scala> println(test3)
Set(one, two, three)
我在这里错过了什么?
在使用集合时,有两件事要避免(如果可能的话)。如您所知,不可变集合优于可变集合。但是,将不可变集合存储在可变变量中只是 "delays" 问题。您将可变性及其带来的所有问题从集合本身转移到保存集合的变量。无论哪种方式,你都有一个状态。
理想的解决方案是避免两者。也就是说,同时使用不可变集合和不可变字段 (vals)。例如,一个函数可以生成一个不可变的集合,而其他函数可以使用它,而不必将集合本身保存在某个地方或对其进行修改。
一个var
可以重新赋值(它是一个变量,所以它可以变化)。然后您将不再引用之前的对象。
一个val
不能被重新赋值(它是一个值,所以它不能变化),但是你可以调用该对象上的方法,例如,如果值是 mutable
集。
当我说 vary 时,我的意思基本上是引用不能变化。这有点令人困惑,我知道。
换句话说:val
s 和 var
s 都可以指向具有自身可以改变的内部状态的对象。喜欢mutable地图。
我鼓励您自己编写一个代码示例来验证这一点 table:
| MutableSet | ImmutableSet -------------------------------------------------- var | Reassign. Insert element | Reassign val | Insert | None of these