Почему в Scala работает `println (1,2)`?

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

def println (x : Any) : Unit

Как получается, что работает следующее:

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

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

9
задан lindelof 19 August 2010 в 20:54
поделиться

1 ответ

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

12
ответ дан 4 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: