斯卡拉地图:神秘的语法糖?

oxb*_*kes 9 maps scala syntactic-sugar scala-collections

我刚刚发现了scala的这种语法Map(这里以可变形式使用)

val m = scala.collection.mutable.Map[String, Int]()
m("Hello") = 5
println(m) //PRINTS Map(Hello -> 5)
Run Code Online (Sandbox Code Playgroud)

现在我不确定这是否是语言中内置的语法,或者这里是否有更基本的东西涉及地图扩展的事实PartialFunction.谁能解释一下?

sta*_*lue 14

如果你的意思是(如果你能更明确的话会很好)

m("Hello") = 5
Run Code Online (Sandbox Code Playgroud)

那意味着语法糖

m.update("Hello", 5)
Run Code Online (Sandbox Code Playgroud)

独立于m是什么.这类似于

m("Hello")
Run Code Online (Sandbox Code Playgroud)

这是语法糖

m.apply("Hello")
Run Code Online (Sandbox Code Playgroud)

(我只是阅读"Scala编程".)

  • 它在第40页. (3认同)
  • 啊,它在DefaultMapModel上! (2认同)

Dan*_*wak 5

@starblue是正确的.需要注意的是,你还可以做颇具创意的东西update比如返回值比分配.例如:

val a = Map(1 -> "one")      // an immutable Map[Int, String]
val b = a(2) = "two"
val c = b(5) = "five"
val d = c(1) = "uno"

d == Map(1 -> "uno", 2 -> "two", 5 -> "five")       // => true
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为immutable.Map#update返回新的实例Map.C训练的眼睛看起来有点奇怪,但你已经习惯了.

  • 所以"m(K)= V"是m.update(K,V)的语法糖.怎么能说出这种情况呢?还有哪些方法可以使用语法糖?我甚至无法在scaladoc中看到Map(或其任何继承者)的方法更新.我怎么会知道Map有这样的方法? (3认同)