Quando ci sono solo due parti, l'espressione è vista come invocazione del metodo. Cioè l'unica possibilità per
println "Hello, world"
sarebbe
println."Hello, world"
che ovviamente non ha molto senso qui. (***** vedi sotto per un'aggiunta)
Se ti piace, tuttavia, puoi scrivere Console println "Hello, World"
per risolvere l'ambiguità.
Non sembra che ambigus nell'esempio di stringa, una stringa non potrebbe essere un nome di metodo, ma pensare al seguente:
class B
val b = new B
object A {
def apply(myB: B) { print("apply") }
def b { print("b") }
}
Ora, quando si scrive A b
, cosa ottengo. Come dovrebbe essere interpretato? Si scopre che:
A b // "b"
A.b // "b"
A(b) // apply
Quindi, c'è una regola chiara su cosa fare in un'espressione in due parti. (Spero che nessuno inizia a spaccare il capello su apply
e vero e proprio metodo invocazione ...)
aggiunta
Con l'avvento delle classi dinamiche, si può giocare in giro un po 'e definire quanto segue
object println extends Dynamic {
def typed[T] = asInstanceOf[T]
def applyDynamic(name: String)(args: Any*) = Console.println(name)
}
E ora guarda !, nessuna parentesi:
println `Hello, world` // prints, "Hello, world"
Naturalmente, per favore non farlo in f ront of children o nel codice della vita reale.
Sintassi è la cerimonia? –