2010-08-19 4 views
9

Dans Scala (2.7.7final), la méthode Predef.println est définie comme ayant la signature suivante:Dans Scala, comment fonctionne `println (1,2)`?

def println (x : Any) : Unit 

Comment se fait, alors que les travaux suivants:

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

le compilateur convertir automatiquement un liste d'arguments séparés par des virgules dans un Tuple? Par quelle magie? Y a-t-il une conversion implicite qui se passe ici, et si oui, laquelle?

Répondre

11

Oui, le compilateur tente de convertir les arguments séparés par des virgules en tuples, s'il n'y a pas de méthodes multi-arguments appropriées et une seule méthode appropriée à un seul argument. Ce n'est pas une conversion implicite, juste un bidouillage de compilateur. Ceci est une caractéristique quelque peu controversée, et va probablement subir des changements à l'avenir, comme le travail est planifié autour de l'unification du traitement des tuples et des listes d'arguments.

+0

Quelqu'un pourrait-il fournir une référence à la controverse? J'aimerais voir où ça va. –

+0

Ah, http://scala-programming-language.1934581.n4.nabble.com/Unifying-Tuple-types-and-function-parameters-td2012123.html est un début. –