我正在研究 Cay Horstmann 的 Scala 的《不耐烦》一书,在那里我遇到了这种更新可变地图的方式。
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
但这只会返回值,而不是可以更新的东西。
出于好奇,我在不可变地图上尝试了相同的语法,但出现以下错误,
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
^
基于此,我假设它scores("Alice") = 5
已转换为scores update ("Alice", 5)
但我不知道它是如何工作的,或者它是如何可能的。
它是如何工作的?