考虑以下:
scala> val myset = Set(1,2)
myset: scala.collection.immutable.Set[Int] = Set(1, 2)
scala> myset += 3
<console>:9: error: reassignment to val
myset += 3
^
scala> var myset = Set(1,2)
myset: scala.collection.immutable.Set[Int] = Set(1, 2)
scala> myset += 3
scala> myset
res47: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
在一种情况下,我可以添加“alex”,而在另一种情况下,我不能。我知道 val 和 var 之间的区别。然而,在这两种情况下让我感到困惑的是,Scala 告诉我 Set 是不可变的,但它允许不同的行为。
我不想那样做,因为在情况下 myset 是一个 val,而在一个情况下它是一个 var。我想要一个比这更深入的答案来解释为什么在这两种情况下 Scala 都说 myset 是一个不可变的集合,但是却以不同的方式对待两者。因为它是反直觉的。
例如,使用可变集和将不可变集声明为 var 有什么区别吗?为什么 scala 会让你改变规则?如果当它说不可变时它意味着它不是更好吗?
谢谢。