2016-07-08 7 views
1

Ich habe folgendes Scala Objekt:Methode in Infixschreibweise ohne definierte Objekt

object myCls { 
    def main(args: Array[String]) = { 
    print getString() 
    } 

    def getString(): String = { 
    return "myString" 
    } 
} 

Auf der Linie:

print getString() 

ich die Frage:

Cannot resolve symbol getString 

Was ist los mit diese Methode?

+0

do print (getString()) –

+0

Ok. Jetzt kompiliert es. Warum funktionierte 'print getString()' nicht? – octavian

+0

weil es keine gültige Syntax ist? –

Antwort

4

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