scala - 将元组添加到 map ?

标签 scala

使用 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/

相关文章:

scala - 如何在 Scala 中为 TreeSet 分配顺序而不重复我自己

scala - 使用 DecisionTreeModel Spark ML 保存管道

scala - 增强 Scala 中的预定义方法

斯卡拉/ Spark : Immutable Dataframes and Memory

java - 如何在我的 Twilio SMS 消息中添加换行符?

java - 玩2.0和IDEA。缺少 javaCore、javaJdbc、javaEbean 依赖项

scala - Spark 作为 Hive 的执行引擎

scala - Scala 中高级类型的推理有哪些限制?

scala - 在 Scala 中为一个有意定义的集合实现映射

sql - Spark/Scala - 当一列为 NULL 时比较数据框中的两列