2017-03-28 4 views
1

Lets sagen, dass ich die folgende Funktion mit Scala Musterabgleich schreiben wollen:Scala Pattern-Matching-Standard

def foo(num: Int): Int = { 
    num match { 
     case 1 => 0 
     case x if x%2 == 0 => 1 
     case _ => _ 
    } 
} 

Aber natürlich habe ich einen Kompilierungsfehler für die Linie bekommen case _ => _

Ich weiß, dass ich es lösen kann indem ich die Zeile ändere, um etwas zu sein wie: case x=>x, aber warum Scalas Mustervergleich erlaubt mir nicht, so etwas zu tun? Es ist wie ein Weg für mich zu sagen, dass es mir egal ist, was da ist, gib es einfach zurück.

Antwort

10

Weil es nicht wirklich Sinn macht. case _ bedeutet "passen Sie alles und nicht den Wert zu einem Symbol zuweisen", aber was sollte => _ bedeuten? Wenn es Ihnen egal ist, was es ist, bedeutet das, dass der Compiler einfach einen zufälligen Wert eingeben kann?

case x => x wird eifrig übereinstimmen alles und den gleichen Wert zurückgeben. Es ist klar, prägnant und die gleiche Anzahl von Zeichen wie Sie wollen. Jeder, der es liest, kann verstehen, was passiert. Du könntest es buchstäblich übersetzen als "Es ist mir egal, was da ist, pass einfach auf und gib es zurück".