Почему в Scala работает `println (1,2)`? - PullRequest
9 голосов
/ 20 августа 2010

В Scala (2.7.7final) метод Predef.println определяется как имеющий следующую подпись:

def println (x : Any) : Unit

Почему так работает следующее:

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

Преобразует ли компилятор список аргументов через запятую в Tuple? По какой магии? Здесь происходит неявное преобразование, и если да, то какое?

1 Ответ

12 голосов
/ 20 августа 2010

Да, компилятор попытается преобразовать разделенные запятыми аргументы в кортежи, если нет подходящих методов с несколькими аргументами и одного подходящего метода с одним аргументом. Это не неявное преобразование, просто взлом компилятора. Это довольно противоречивая особенность, и, вероятно, в будущем она претерпит изменения, поскольку планируется работа по объединению обработки списков кортежей и аргументов.

...