Ответ 1
Объяснение является неожиданным: print
имеет параметр с именем x
. Использование x =...
использует именованный аргумент, поэтому print(x="Hello World")
совпадает с print("Hello World")
.
См. Документы Scala Predef или Predef.scala:
object Predef /*....*/ {
/*....*/
def print(x: Any) = Console.print(x)
/*....*/
}
Примечание: это уже обсуждалось в списке рассылки Scala Internal:
Scala в настоящее время пытается быть разумным в отношении "x = e" в качестве именованного аргумента или назначения... Это может быть удивительно для пользователя....
Предложение: мы осуждаем присвоения в списках аргументов
Для этого также существует проблема SI-8206, это изменение, вероятно, было реализовано в выпуске 426 для Scala 2.13.
Ваш код будет компилироваться после устаревания с тем же значением. Это изменение будет никем (по крайней мере, никто, достаточно знакомый с языковыми спецификациями/реализацией), должен ожидать, что он будет интерпретироваться как присвоение.