2014-09-15 1 views

Antwort

9

Es bedeutet Unit zurück:

val res: Unit = new foo match { 
    case bar: Bar => println("First case statement") 
    case _ => 
} 

Wenn Sie Ihre Aussage ändern etwas statt println zurückzukehren (die Unit zurückgibt):

val res: Any = new foo match { 
    case bar: Bar => "it's a bar" 
    case _ => 
} 

Jetzt ist der Compiler Any geschlossen hat, weil es das erste ist gemeinsamer Supertyp zwischen String und Unit.

Beachten Sie, dass Ihr Fall übereinstimmt falsch ist, da Abgleich auf bar allein heißt, fangen alle Variablen, die Sie wahrscheinlich wollten bar: Bar.

+0

Mit Ihrer Antwort und Ihrer Bearbeitung einverstanden. –

1

Der leer Standard Fall ist in Ihrem Musteranpassungs Beispiel notwendig, weil sonst der Match Ausdruck eine MatchError für jedes ausdr Argument werfen würde, die nicht eine Bar.

Die Tatsache, dass kein Code für diesen zweiten Fall angegeben ist, also wenn dieser Fall ausgeführt wird, tut es nichts.

Das Ergebnis beider Fälle ist der Einheitswert (), der daher auch das Ergebnis des gesamten Übereinstimmungsausdrucks ist.

Mehr Details über sie in Martin Odersky der Programmierung in Scala Buch unter Fallklassen und Pattern Matching Kapitel.

Verwandte Themen