8

为什么会这样:

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)
4

2 回答 2

6

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

x + (1,0)是符号,x.+(1,0)但遗憾的是没有方法x可以接受两个Int参数。你想要的是x.+((1,0)),即x + ((1,0))

Scala 中有一种叫做自动元组的东西,请参阅这个问题和答案,例如,它会重写println (1,2)println((1,2)). 除非这在这里不起作用,因为该+方法采用可变数量的参数,而不是像println.

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

于 2013-07-20T11:33:48.537 回答
2

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

val x = Map[Int,Int]()
x + ((1, 0))
于 2013-07-20T11:32:29.923 回答