为Scala地图添加值

时间:2013-07-20 11:09:57

标签: scala map

为什么这样做:

val x = Map[Int,Int]()
val y = (1, 0)
x + y

但不是吗?

val x = Map[Int,Int]()
x + (1, 0)

产生的错误是:

<console>:11: error: type mismatch;
found   : Int(1)
required: (Int, ?)
          x + (1,0)
               ^

如果我要将(1,0)输入REPL,则会将其正确输入为(Int,Int)

我应该补充说这很好用:

x + (1 -> 0)

2 个答案:

答案 0 :(得分:6)

这是由元组符号与参数列表之间的相似性引起的歧义:

x + (1,0)x.+(1,0)的表示法,但遗憾的是x上没有方法需要两个Int个参数。你想要的是x.+((1,0)),即x + ((1,0))

Scala中有一些名为auto-tupling的内容,请参阅this question and answers,例如,println (1,2)重写为println((1,2))。除非这在此处不起作用,因为+方法采用可变数量的参数而不是像println那样的单个参数。

您收到奇怪的错误消息,因为它希望参数列表(1,0)中的每个值都是元组,如myMap + ((1,2), (1,3), (3,4))中所示。它会找到Int而不是(Int, Int),因此会出错。

答案 1 :(得分:2)

添加另一对括号以使其正常工作:

val x = Map[Int,Int]()
x + ((1, 0))