为什么这样做:
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)
答案 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))