[英]Scala immutable Set is mutable?
文檔說:
scala.collection.immutable包中的集合保證對每個人都是不可變的。 這樣的集合在創建后永遠不會改變 。
但我沒有得到我期望的行為:
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)
我在這里錯過了什么?
可以重新分配var
(它是一個變量 ,因此它可以變化 )。 然后,您根本不再引用上一個對象。
val
不能重新分配(它是一個值 ,因此它不能改變 ),但您可以調用該對象上的方法,例如,如果該值是mutable
集。
當我說變化我基本上意味着參考不能改變。 我知道,這有點令人困惑。
換句話說: val
和var
都可以指向內部狀態本身可以改變的對象。 像一張可變的地圖。
我鼓勵您自己編寫一個代碼示例來驗證此表:
| MutableSet | ImmutableSet -------------------------------------------------- var | Reassign. Insert element | Reassign val | Insert | None of these
使用集合時,有兩件事需要避免(如果可能)。 如你所知,不可變集合優於可變集合。 但是,將不可變集合存儲在可變變量中只會“延遲”解決問題。 您將可變性及其從集合本身帶來的所有問題移動到包含集合的變量。 無論哪種方式,你都有一個州。
理想的解決方案是避免兩者。 也就是說,使用不可變集合和不可變字段(val)。 例如,函數可以生成不可變集合,而其他函數可以使用它,而無需將集合本身保留在某處或修改它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.