В Scala (2.7.7final) метод Predef.println
определяется как имеющий следующую сигнатуру:
def println (x : Any) : Unit
Как получается, что работает следующее:
scala> println(1,2)
(1,2)
Компилятор автоматически конвертирует разделенный запятыми список аргументов в кортеж? По какой магии? Здесь происходит неявное преобразование, и если да, то какое?
Да, компилятор попытается преобразовать аргументы, разделенные запятыми, в кортежи, если нет подходящих методов с несколькими аргументами и единственного подходящего метода с одним аргументом. Это не неявное преобразование, это просто взлом компилятора. Это несколько спорная функция и, вероятно, в будущем она будет претерпевать изменения, поскольку планируется работа по унификации обработки кортежей и списков аргументов.