2016-04-08 6 views
0

Ich habe einen Fehler "illegal Beginn des einfachen Ausdrucks" in scala bei dem Versuch, dies zu tun:scala sys.process_ illegal Beginn der einfachen Ausdruck Fehler

def test() = { 
    val h = "ls"! 
    if (h != 0) 
     println("error") 

} 

dies ist der Fehler

[error]   if (h != 0) 
[error] one error found 
[error] (compile:compileIncremental) Compilation failed 

Kann mir jemand sagen, was ich falsch gemacht habe?

Antwort

1

Scala Compiler wird hier verwirrt, weil Sie ! als Postfix-Operator aufrufen. Es kann nicht herausfinden, welche Version verwendet werden soll und wo das implizierte Semikolon platziert werden soll. Sie können entweder ein Semikolon wie folgt hinzu:

def test() = { 
    val h = "ls"!; 
    if (h != 0) 
     println("error") 
} 

oder als Methode aufrufen:

def test() = { 
    val h = "ls".! 
    if (h != 0) 
     println("error") 
} 

oder eine neue Zeile hinzufügen:

def test() = { 
    val h = "ls"! 

    if (h != 0) 
     println("error") 
} 
+0

Oder leere Zeile hinzufügen. Beachten Sie, dass es sich um eine von der Überlastung unabhängige Syntax handelt. –

+0

@ Som-Snytt in der Tat. Ich wollte keinen neuen Ansatz vorschlagen, aber ich habe ihn der Vollständigkeit halber hinzugefügt. –

0

Best Practice ein Postfix-Operator zu verwenden, Verwenden Sie den Punkt . Operator. Sie sollten es aufrufen wie val h = "ls".!

Es macht Code weniger mehrdeutig wie Semikolon ist optional in Scala und Compiler könnte es als eine Infix-Notation behandeln.

Von Scala doc:

Dieser Stil ist unsicher und sollte nicht verwendet werden. Da Semikolons optional sind, wird der Compiler versuchen, sie als eine Infix-Methode zu behandeln, wenn es kann, möglicherweise einen Begriff aus der nächsten Zeile nehmend.

Für vollständige Referenz siehe diesen Link: Suffix Notation. Dieser Beitrag kann auch hilfreich sein Scala's "postfix ops".

Verwandte Themen