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

时间:2010-08-19 20:54:09

标签: scala tuples implicit-conversion

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

def println (x : Any) : Unit

为什么以后有效:

scala> println(1,2)  
(1,2)

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

1 个答案:

答案 0 :(得分:11)

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