2017-10-06 109 views
-1

使用Scala(2.12.2),默認情況下在一個類爲什麼Map在默認情況下在Scala中不可變?

private var myMap = Map.empty[String, ActorRef] 

創建一個新的地圖,當我得到一個不可變類

scala.collection.immutable.Map[String,akka.actor.ActorRef] 

我期待的是可變的,因爲我把它定義爲'var'

+5

斯卡拉是功能傾向;你應該期望在默認情況下你會得到不可變的結構。正如答案指出的那樣,'var'沒有說明它所持有的對象的可變性,只是參考本身的可變性。 – Carcigenicate

+1

默認情況下,_everything_在scala中是不可變的。假設「var」關鍵字和可變集合根本不存在,直到獲得足夠的語言經驗,以便能夠在實際需要時分辨0.1%的情況爲止,這通常是個好主意。 – Dima

回答

6

這裏可以改變的是參考myMap持有,您可以根據需要重新分配變量。所指值的易變性或不變性是參考是另一回事。如果創建可變映射,則可以將其分配給通過val聲明的變量,並可以修改映射,但不能修改變量。

相關問題