我可以更新一个可变的。映射值与+=
:
scala> val map = mutable.Map[Int,Int]()
map: scala.collection.mutable.Map[Int,Int] = Map()
scala> map(5) = 5
scala> map
res55: scala.collection.mutable.Map[Int,Int] = Map(5 -> 5)
scala> map(5) += 1
scala> map
res57: scala.collection.mutable.Map[Int,Int] = Map(5 -> 6)
但我不能使用+=
与getOrElseUpdate
,我不明白为什么:
scala> map.getOrElseUpdate(5, 0) += 1
<console>:16: error: value += is not a member of Int
Expression does not convert to assignment because receiver is not assignable.
map.getOrElseUpdate(5, 0) += 1
^
我知道我以前使用过mutable.ArrayBuffer
值的mutable.SortedMap
,它让我使用该类型的+=
操作与getOrElseUpdate
没有问题。我应该使用mutable.Int
之类的东西吗?
在scala中,你没有获得"引用"的语义;这是因为scala的好风格是你不会自己改变变量,所以你不能这样做。而不是这样,你可以用函数来描述突变,而不是像这样直接改变变量:
import scala.collection.mutable
val map = mutable.Map.empty[Int,Int]
val yourKey: Int = ???
map.updateWith(yourKey){
case Some(i) => Some(i+1)
case None => Some(1)
}
这里我是这样用的:https://www.scala-lang.org/api/2.13.6/scala/collection/mutable/Map.html#updateWith(key:K)(remappingFunction:Option[V]=%3EOption[V]):Option[V]
另外,数组缓冲区中的+、+=和+:函数和其他可变集合具有其他语义。