正在推断为元组的Scala类型参数

正在推断为元组的Scala类型参数,scala,syntax,Scala,Syntax,我突然遇到了这样一种(我意想不到的)情况: def method[T](x: T): T = x scala> method(1) res4: Int = 1 scala> method(1, 2) res5: (Int, Int) = (1,2) 为什么在两个或更多参数的情况下,方法返回并推断元组,但抛出有关参数列表的错误? 是故意的吗?也许这种现象有个名字?这里是: 这是 这都意味着在上面编写的示例(一个参数的类型参数化方法)中,scala尝试将参数打包到元组中,并将函数应

我突然遇到了这样一种(我意想不到的)情况:

def method[T](x: T): T = x

scala> method(1)
res4: Int = 1

scala> method(1, 2)
res5: (Int, Int) = (1,2)
为什么在两个或更多参数的情况下,方法返回并推断元组,但抛出有关参数列表的错误? 是故意的吗?也许这种现象有个名字?

这里是:

这是

这都意味着在上面编写的示例(一个参数的类型参数化方法)中,scala尝试将参数打包到元组中,并将函数应用于该元组。根据这两条简短的信息,我们可以得出结论,语言规范中没有提到这种行为,人们讨论为自动元组添加编译器警告。这可以称为自动tupling
%scala2.10-Xlint
% scala2.10 -Xlint

scala> def method[T](x: T): T = x
method: [T](x: T)T

scala> method(1)
res1: Int = 1

scala> method(1, 2)
<console>:9: warning: Adapting argument list by creating a 2-tuple: this may not be what you want.
        signature: method[T](x: T): T
  given arguments: 1, 2
 after adaptation: method((1, 2): (Int, Int))
              method(1, 2)
                    ^
res2: (Int, Int) = (1,2)
scala>def方法[T](x:T):T=x 方法:[T](x:T)T scala>方法(1) res1:Int=1 scala>方法(1,2) :9:警告:通过创建2元组调整参数列表:这可能不是您想要的。 签名:方法[T](x:T):T 给定参数:1,2 适应后:方法((1,2):(Int,Int)) 方法(1,2) ^ res2:(Int,Int)=(1,2)
好的,我已经知道答案了,但是想给别人一个接受:)会等着自己回答一个问题是这样鼓励的,那就去做吧……是的,我也想知道。你可以自己回答这个问题!好像有很多是相关的。如果有人误解了我的第一句话(“好的,我知道答案”)-我写问题的时候还不知道。这只是一个巧合,我在另一个来源找到了答案。当然,我问这个问题并不是为了测试我能提出什么棘手的问题。我在这里写道,这是一些解析器的怪癖,但我认为他们讨论的是一些类似的但又是另一种情况。因此,在2.10中添加了警告。
% scala2.10 -Xlint

scala> def method[T](x: T): T = x
method: [T](x: T)T

scala> method(1)
res1: Int = 1

scala> method(1, 2)
<console>:9: warning: Adapting argument list by creating a 2-tuple: this may not be what you want.
        signature: method[T](x: T): T
  given arguments: 1, 2
 after adaptation: method((1, 2): (Int, Int))
              method(1, 2)
                    ^
res2: (Int, Int) = (1,2)