我正在通過Cay Horstmann的Scala處理Impatient書,我遇到了這種更新可變映射的方法。Scala的可變Map更新[map(key)= newValue]語法是如何工作的?
scala> val scores = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)
scores: scala.collection.mutable.Map[String,Int] = Map(Bob -> 3, Alice -> 10, Cindy -> 8)
scala> scores("Alice") // retrieve the value of type Int
res2: Int = 10
scala> scores("Alice") = 5 // Update the Alice value to 5
scala> scores("Alice")
res4: Int = 5
它看起來像scores("Alice")
命中apply
在MapLike.scala
。但是這隻會返回值,而不是可以更新的值。
出於好奇,我嘗試同樣的語法不變的地圖上,並出現以下錯誤,在此基礎上,我假設scores("Alice") = 5
轉化爲scores update ("Alice", 5)
scala> val immutableScores = Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)
immutableScores: scala.collection.immutable.Map[String,Int] = Map(Alice -> 10, Bob -> 3, Cindy -> 8)
scala> immutableScores("Alice") = 5
<console>:9: error: value update is not a member of scala.collection.immutable.Map[String,Int]
immutableScores("Alice") = 5
^
,但我不知道它是如何工作的,甚至可能的。
它是如何工作的?
我相信這只是句法糖。據我瞭解,這裏沒有深入的基礎教訓。 – placeybordeaux 2013-03-24 22:23:29
正如你所看到的,'update'方法被調用,而不是'apply'方法。 – 2013-03-24 22:27:12
不可變的手段**只讀**和可變意味着**讀/寫**,所以問題被提升 – 2014-12-26 10:09:38