斯卡拉:奇怪的是加入了一张地图

oxb*_*kes 3 scala map

我刚刚注意到,虽然在向地图添加一对时需要澄清一些parens,但在重新分配时我并不需要它们:

Welcome to Scala version 2.9.1.final (Java HotSpot(TM) Server VM, Java 1.6.0_18).
Type in expressions to have them evaluated.
Type :help for more information.
Run Code Online (Sandbox Code Playgroud)

给我一些价值

scala> var n = Map.empty[Int, String]
n: scala.collection.immutable.Map[Int,String] = Map()
Run Code Online (Sandbox Code Playgroud)

尝试添加到地图而没有明确的括号:

scala> n + 1 -> ""
<console>:30: error: type mismatch;
 found   : Int(1)
 required: (Int, ?)
              n + 1 -> ""
                  ^
Run Code Online (Sandbox Code Playgroud)

像我预期的那样失败.但通过重新分配做同样的事情不会:

scala> n += 1 -> ""

scala> n
res12: scala.collection.immutable.Map[Int,String] = Map(1 -> "")
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?为什么这不会失败?是scalac自己添加parens?

Rex*_*err 11

这只是一个优先问题. +-具有相同的优先权. =更低.因此Scala (n + 1) -> ""在前一种情况下看到n += (1 -> "")了后者(然后n = (n + (1 -> ""))根据赋值运算符的正常规则进行转换).