2010-08-19 2 views
9

In Scala (2.7.7final), il metodo Predef.println è definito come avente la seguente firma:In Scala, come mai `println (1,2)` funziona?

def println (x : Any) : Unit 

Come mai, allora, che le seguenti opere:

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

fa il compilatore converte automaticamente un elenco di argomenti separati da virgola in una tupla? Con quale magia? C'è una conversione implicita in corso qui, e se sì, quale?

risposta

11

Sì, il compilatore tenterà di convertire gli argomenti separati da virgola in tuple, se non ci sono metodi multi-argomento appropriati e un singolo metodo a un argomento appropriato. Non è una conversione implicita, solo un hack del compilatore. Questa è una caratteristica alquanto controverso, e probabilmente subirà dei cambiamenti in futuro, poiché il lavoro è pianificato attorno all'unificazione del trattamento delle tuple e degli elenchi di argomenti.

+0

Qualcuno potrebbe fornire un riferimento alla controversia? Mi piacerebbe vedere dove sta andando. –

+0

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