我刚刚注意到,虽然在向地图添加一对时需要澄清一些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 -> ""))根据赋值运算符的正常规则进行转换).
| 归档时间: |
|
| 查看次数: |
802 次 |
| 最近记录: |