在Scala中,为什么`println(1,2)`有效?

lin*_*lof 9 scala tuples implicit-conversion

在Scala(2.7.7final)中,该Predef.println方法被定义为具有以下签名:

def println (x : Any) : Unit
Run Code Online (Sandbox Code Playgroud)

怎么来,那么以下工作:

scala> println(1,2)  
(1,2)
Run Code Online (Sandbox Code Playgroud)

编译器是否自动将以逗号分隔的参数列表转换为元组?通过什么魔术?这里是否存在隐式转换,如果是,那么哪一个?

Dav*_*ith 12

是的,如果没有合适的多参数方法和单个适当的单参数方法,编译器将尝试将逗号分隔的参数转换为元组.它不是一个隐式转换,只是一个编译器黑客.这是一个有点争议的特征,并且可能会继续发生变化,因为计划围绕统一元组和参数列表的处理工作.