Scala:添加到地图中的奇怪之处

Scala:添加到地图中的奇怪之处,scala,map,Scala,Map,我刚刚注意到,在向地图添加配对时,我需要澄清配对,但在执行重新分配时,我不需要它们: 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. 给我一些价值观 scala> var n = Map.empty[Int, String

我刚刚注意到,在向地图添加配对时,我需要澄清配对,但在执行重新分配时,我不需要它们:

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.
给我一些价值观

scala> var n = Map.empty[Int, String]
n: scala.collection.immutable.Map[Int,String] = Map()
正在尝试在没有明确括号的情况下添加到地图:

scala> n + 1 -> ""
<console>:30: error: type mismatch;
 found   : Int(1)
 required: (Int, ?)
              n + 1 -> ""
                  ^
发生了什么事?为什么这没有失败?
scalac
是否添加了参数本身?

根据(6.12.4):

赋值运算符被特别处理,因为如果没有其他有效的解释,它们可以扩展为赋值。。。。这个 如果满足以下两个条件,则会重新解释。
1.左侧l没有名为+=的成员,也不能通过隐式转换(§6.26)转换为名为>+=的成员的值。
2.赋值
l=l+r
类型正确。特别是,这意味着l指的是一个可以赋值的变量或对象,它可以转换为一个名为+的成员的值


(1) Map没有名为
+=
(has)和AFAIK的成员,也没有与之相关的隐式转换,赋值类型绝对正确(2):n定义为
var
iable,并且有成员
+

,这只是一个优先级问题<代码>+和
-
具有相同的优先级<代码>=较低。因此Scala在前一种情况下看到
(n+1)->“
,在后一种情况下看到
n+=(1->)
(然后根据赋值运算符的常规规则将其转换为
n=(n+(1->)

scala> n += 1 -> ""

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