调用方法

时间:2017-10-25 10:33:31

标签: scala

scala编译器在这里做什么?

def f[A](x: A): A = {
  x
}

f(1,2,3)

res0: (Int, Int, Int) = (1,2,3)

我不是要求x成为一个可变参数。但是,编译器似乎正在将参数列表转换为产品类型。

如果我指定类型,例如

def f(x: Int): Int = {
  x
}

然后尝试拨打

f(1,2,3)

编译器辩称too many arguments (3) for method f

不应该说Expected Int and found (Int, Int, Int)吗?

为什么会这样?

1 个答案:

答案 0 :(得分:3)

编译器将类型A推断为Tuple3[Int, Int, Int] a.k.a. (Int, Int, Int)。它提供了将f(1,2,3)转换为f((1,2,3))的语法功能。