2010-08-19 12 views
9

W Scala (2.7.7final), metoda Predef.println jest zdefiniowany jako mający następujący podpis:W Scala, jak to działa `println (1,2)`?

def println (x : Any) : Unit 

Jak to się stało, wówczas następujące prace:

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

Czy kompilator automatycznie konwertować rozdzielana przecinkami lista argumentów w Kodzie? Jaką magią? Czy dzieje się tutaj niejawna konwersja, a jeśli tak, to która?

Odpowiedz

11

Tak, kompilator podejmie próbę przekonwertowania argumentów oddzielonych przecinkami na krotki, jeśli nie ma odpowiednich metod wieloargumentowych i jednej odpowiedniej metody opartej na jednym argumencie. To nie jest niejawna konwersja, tylko hackowanie kompilatora. Jest to dość kontrowersyjna funkcja i prawdopodobnie ulegnie zmianom w przyszłości, ponieważ planowane są prace nad ujednoliceniem traktowania krotek i list argumentów.

+0

Czy ktoś może podać odniesienie do kontrowersji? Chciałbym zobaczyć, gdzie to się dzieje. –

+0

Ah, http://scala-programming-language.1934581.n4.nabble.com/Unifying-Tuple-types-and-function-parameters-td2012123.html to początek. –