正在推断为元组的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)