使用 Scala 2.11.8,我可以附加一个 key - value
通过以下方式与 map 配对:
scala> Map( (1 -> 1) ) + (2 -> 2)
res8: scala.collection.immutable.Map[Int,Int] = Map(1 -> 1, 2 -> 2)
但是我如何使用元组作为
+
的论点?scala> Map( (1 -> 1) ) + (2, 2)
<console>:12: error: type mismatch;
found : Int(2)
required: (Int, ?)
Map( (1 -> 1) ) + (2, 2)
^
这也不起作用:
scala> Map( (1, 1) ) + (2, 2)
<console>:12: error: type mismatch;
found : Int(2)
required: (Int, ?)
Map( (1, 1) ) + (2, 2)
^
<console>:12: error: type mismatch;
found : Int(2)
required: (Int, ?)
Map( (1, 1) ) + (2, 2)
^
Map#+的签名是:
+(kv: (A, B)): Map[A, B]
,所以我不确定为什么它不起作用。编辑
scala> Map( (1,1) ).+( (2, 2) )
res0: scala.collection.immutable.Map[Int,Int] = Map(1 -> 1, 2 -> 2)
有效,但为什么上面没有?
最佳答案
在 Scala 中,任何二元运算( *
、 +
等)实际上都是该运算中第一个元素的类的方法。
因此,例如,2 * 2
相当于 2.*(2)
, 因为 *
只是类 Int
的一个方法.
当您输入 Map( (1 -> 1) ) + (2, 2)
时会发生什么是 Scala 识别出您正在使用 +
Map
的方法类(class)。但是,它认为您正在尝试将多个值传递给此方法,因为它默认将起始括号解释为参数列表的开头(这是一个(合理的)设计决策)。
解决此问题的方法是将元组包装在另一对括号中或使用 ->
语法(带括号,因为运算符优先)。
scala> Map( (1 -> 1) ) + ((2, 2))
res0: scala.collection.immutable.Map[Int,Int] = Map(1 -> 1, 2 -> 2)
scala> Map( (1 -> 1) ) + (2 -> 2)
res1: scala.collection.immutable.Map[Int,Int] = Map(1 -> 1, 2 -> 2)
关于scala - 将元组添加到 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40221310/