Когда есть только две части, выражение рассматривается как вызов метода.Т.е. единственная возможность для
println "Hello, world"
будет
println."Hello, world"
, что, конечно, здесь не имеет большого смысла.(***** см. ниже для добавления)
Если вы хотите, однако, вы можете написать Console println "Hello, World"
, чтобы устранить неоднозначность.
Не похоже, что неоднозначность вПример строки: строка вряд ли может быть именем метода, но подумайте о следующем:
class B
val b = new B
object A {
def apply(myB: B) { print("apply") }
def b { print("b") }
}
Теперь, когда я пишу A b
, что я получу.Как это следует интерпретировать?Получается, что:
A b // "b"
A.b // "b"
A(b) // apply
Итак, есть четкое правило, что делать в выражении из двух частей.(Я надеюсь, что никто не начнет раскалывать волосы о apply
и реальном вызове метода…)
Добавление
С появлением динамических классов вы можете немного поиграть иопределите следующее
object println extends Dynamic {
def typed[T] = asInstanceOf[T]
def applyDynamic(name: String)(args: Any*) = Console.println(name)
}
А теперь посмотрите, нет скобок:
println `Hello, world` // prints, "Hello, world"
Конечно, пожалуйста, не делайте этого перед детьми или в реальном коде.