Wenn Sie bei der Definition von Infix Expression in der Spezifikation aussehen sehen Sie:
InfixExpr ::= PrefixExpr
| InfixExpr id [nl] InfixExpr
PrefixExpr ::= [`-' | `+' | `~' | `!'] SimpleExpr
SimpleExpr ::= `new' (ClassTemplate | TemplateBody)
| BlockExpr
| SimpleExpr1 [`_']
Wenn der Scala-Compiler für infix notation an der Syntax sieht, ist es in der Form:
PrefixExpr
| InfixExpr id [nl] InfixExpr`
Wir kann sich vorstellen als object -> method -> parameters (0 or 1)
In dem Beispiel, das Sie gebucht haben, weil print
ist eine Methode indefiniert, die implizit importiert wird, haben wir nicht die PrefixExpr
vor der [Identifier[NewLine]]
.
Damit dies funktioniert, müssen wir explizit aufrufen print
über Predef
:
scala> :pa
// Entering paste mode (ctrl-D to finish)
def getString(): String = {
"myString"
}
// Exiting paste mode, now interpreting.
getString:()String
scala> print getString()
<console>:11: error: missing arguments for method print in object Predef;
follow this method with `_' if you want to treat it as a partially applied function
print getString()
^
scala> Predef print getString()
myString
scala>
Seit getString
von arity-0 ist, können wir fallen auch die Klammer um es:
scala> Predef print getString
myString
do print (getString()) –
Ok. Jetzt kompiliert es. Warum funktionierte 'print getString()' nicht? – octavian
weil es keine gültige Syntax ist? –