Scala的可变Map更新[map(key)= newValue]语法如何工作?

Dan*_*ood 20 scala scala-collections

我正在通过Cay Horstmann的Scala for the Impatient book,我遇到了这种更新可变地图的方式.

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
Run Code Online (Sandbox Code Playgroud)

它看起来像scores("Alice")命中applyMapLike.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
          ^
Run Code Online (Sandbox Code Playgroud)

基于此,我假设它scores("Alice") = 5被转化为scores update ("Alice", 5)但我不知道它是如何工作的,或者它是如何工作的.

它是如何工作的?

Bor*_*der 24

这是一个例子apply,update语法.

当您拨打map("Something")此呼叫时map.apply("Something"),它会依次呼叫get.

当您拨打map("Something") = "SomethingElse"此呼叫时map.update("Something", "SomethingElse"),它会依次呼叫put.

看看这个是为了更全面的解释.