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

标签 scala scala-collections

我正在为不耐烦的书研究Cay Horstmann的Scala,在那里我遇到了这种更新可变 map 的方法。

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。但这仅返回值,而不是可以更新的值。

出于好奇,我在不可变的 map 上尝试了相同的语法,但出现以下错误,
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),但是我不知道它如何工作,甚至是不可能的。

它是如何工作的?

最佳答案

这是applyupdate语法的示例。

当您调用map("Something")时,它会调用map.apply("Something"),后者又会调用get

当您调用map("Something") = "SomethingElse"时,它会调用map.update("Something", "SomethingElse"),后者又会调用put

查看this,以获得更完整的说明。

关于scala - Scala的可变Map更新[map(key)= newValue]语法如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15604697/

相关文章:

json - 从 Play JSON API 获取更好的错误消息

Scala 特征混合顺序和 super 调用

java - 为什么我们需要在 Scala 中为 Double 传递指数形式的数字?

scala - 为什么 Scala 集合没有任何人类可读的方法,如 .append、.push 等

scala - 将 Scala 列表拆分为 n 个交错列表

scala - Scala中向量序列的总和

scala - 在 akka-http Scala 中将泛型类型注册到 spray-json-support 的正确方法是什么?

scala - 为什么案例类伴生对象要扩展 Function?

scala 集合转字符串

scala - Scala 集合转发器和代理的用例