Scala 编程语言:b/w 的区别是啥:1) Var 不可变映射、Val 可变映射和 Var 可变映射? [复制]
Posted
技术标签:
【中文标题】Scala 编程语言:b/w 的区别是啥:1) Var 不可变映射、Val 可变映射和 Var 可变映射? [复制]【英文标题】:Scala Programming Language: What's the diff b/w : 1) Var immutable Map, Val mutable Map & Var mutable Map? [duplicate]Scala 编程语言:b/w 的区别是什么:1) Var 不可变映射、Val 可变映射和 Var 可变映射? [复制] 【发布时间】:2020-10-14 12:30:13 【问题描述】:什么是 diff b/w : 1) Var immutable Map, Val mutable Map & Var mutable Map?
The image attached here is of the same code.
另外,为什么所有这些 Map 的定义都表现得好像它们是可变的?
scala> var var_m_map = collection.mutable.Map(("key1",1), ("key2",2))
var_m_map: scala.collection.mutable.Map[String,Int] = Map(key2 -> 2, key1 -> 1)
scala> var_m_map += ("key30" -> 30)
res8: scala.collection.mutable.Map[String,Int] = Map(key30 -> 30, key2 -> 2, key1 -> 1)
scala> val val_m_map = collection.mutable.Map(("key10",10), ("key20",20))
val_m_map: scala.collection.mutable.Map[String,Int] = Map(key20 -> 20, key10 -> 10)
scala> var_m_map += ("key30" -> 30)
res9: scala.collection.mutable.Map[String,Int] = Map(key30 -> 30, key2 -> 2, key1 -> 1)
scala> var var_i_map = collection.immutable.Map(("key100",100), ("key200",200))
var_i_map: scala.collection.immutable.Map[String,Int] = Map(key100 -> 100, key200 -> 200)
scala> var_i_map += ("key300" -> 300)
scala> var_i_map
res11: scala.collection.immutable.Map[String,Int] = Map(key100 -> 100, key200 -> 200, key300 -> 300)
scala> var var_i_map2 = Map(("key700",700), ("key800",800))
var_i_map2: scala.collection.immutable.Map[String,Int] = Map(key700 -> 700, key800 -> 800)
scala> var_i_map2 += ("key900" -> 900)
scala> var_i_map2
res13: scala.collection.immutable.Map[String,Int] = Map(key700 -> 700, key800 -> 800, key900 -> 900)
【问题讨论】:
请注意,'var' 表示引用是可变的。这并不意味着引用的对象是可变的。 'val' 表示引用是不可变的。添加到不可变地图将返回您添加元素的新地图 【参考方案1】:var var_i_map
是对不可变 Map 的可变引用。
+=
向当前绑定到var_i_map
的不可变映射添加一个元素,该映射返回一个新的不可变映射实例。这个新实例被(重新)分配给var_i_map
。
注意原来绑定到var_i_map
的不可变集合没有改变,可变变量正在改变。
将var var_i_map
更改为val var_i_map
,您的代码将无法编译,因为您正在尝试更改不可变的值。
【讨论】:
以上是关于Scala 编程语言:b/w 的区别是啥:1) Var 不可变映射、Val 可变映射和 Var 可变映射? [复制]的主要内容,如果未能解决你的问题,请参考以下文章