为什么映射在Scala中默认是不可变的?

为什么映射在Scala中默认是不可变的?,scala,scala-2.12,Scala,Scala 2.12,使用scala(2.12.2),在类中创建新映射时 private var myMap = Map.empty[String, ActorRef] 默认情况下,我得到一个不可变的类 scala.collection.immutable.Map[String,akka.actor.ActorRef] 我希望是可变的,因为我将它定义为“var”这里可变的是由myMap持有的引用,如果需要,可以重新分配变量。指向引用的值的易变性或不变性是另一回事。如果创建可变映射,可以将其分配给通过val声明的变

使用scala(2.12.2),在类中创建新映射时

private var myMap = Map.empty[String, ActorRef]
默认情况下,我得到一个不可变的类

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

我希望是可变的,因为我将它定义为“var”

这里可变的是由
myMap
持有的引用,如果需要,可以重新分配变量。指向引用的值的易变性或不变性是另一回事。如果创建可变映射,可以将其分配给通过
val
声明的变量,并可以修改映射,但不能修改变量。

Scala是函数式的;您应该期望在默认情况下得到不可变的结构。正如答案所指出的,
var
没有说明它所持有的对象的可变性,只说明引用本身的可变性。在scala中,默认情况下,一切都是不可变的。通常,最好假设
var
关键字和可变集合根本不存在,直到您对该语言有足够的经验,能够在实际需要时告诉0.1%的情况。