簡體   English   中英

Scala不可變集是可變的嗎?

[英]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集。

當我說變化我基本上意味着參考不能改變。 我知道,這有點令人困惑。

換句話說: valvar都可以指向內部狀態本身可以改變的對象。 像一張可變的地圖。

我鼓勵您自己編寫一個代碼示例來驗證此表:

  | MutableSet | ImmutableSet -------------------------------------------------- var | Reassign. Insert element | Reassign val | Insert | None of these 

使用集合時,有兩件事需要避免(如果可能)。 如你所知,不可變集合優於可變集合。 但是,將不可變集合存儲在可變變量中只會“延遲”解決問題。 您將可變性及其從集合本身帶來的所有問題移動到包含集合的變量。 無論哪種方式,你都有一個州。

理想的解決方案是避免兩者。 也就是說,使用不可變集合和不可變字段(val)。 例如,函數可以生成不可變集合,而其他函數可以使用它,而無需將集合本身​​保留在某處或修改它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM