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 可变映射? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Scala 和 Groovy 之间的主要区别是啥? [关闭]

VB和C#的区别是啥

vue中的v-show和v-if是做啥用的,两者区别是啥

scala与python区别都有哪些

scala的unit是啥意思?

spark是啥语言开发