Für die Entwicklung von Aufzügen muss ich manchmal match
- case
-Anweisungen wie folgt verwenden. (Umgeschrieben auf einfache Scala für leichteres Verständnis.) Eine Anmerkung zu ihnen: Dies sind tatsächlich verschiedene Teilfunktionen, die in verschiedenen Teilen des Codes definiert sind. Daher ist es wichtig, dass eine Case-Anweisung in oder vor dem Guard fehlschlägt, um den anderen Teil zu haben Funktionen ausgewertet (wenn Übereinstimmung fehlschlägt, das ist).
Um zu wissen, dass die case
-Anweisung erfolgreich ist, muss ich die Datenbank mit findInDb
abfragen und prüfen, ob das Ergebnis gültig ist. Danach muss ich es erneut aufrufen, um den Wert zu verwenden.
Mache etwas wie
%Vor% funktioniert nicht, da der Bereich von res
dann auf die geschweiften Klammern beschränkt ist.
Ich kann natürlich ein var res = _
außerhalb definieren und ihm zuweisen, aber ich fühle mich nicht gut dabei.
Ist es möglich, eine Variable innerhalb der Wache zu deklarieren? Wenn es möglich ist, case r@Req(…)
zu machen, warum nicht case r@Req() if res@(r.isDefined)
?
Du bist wirklich sehr nah dran. Das fehlende Schlüsselelement ist die Verwendung eines Extrahierers anstelle eines Wächterausdrucks.
%Vor%Extraktoren müssen nicht nur Informationen zurückgeben, die bereits in ihren Argumenten vorhanden sind, das ist nur der übliche Anwendungsfall. Sie können tatsächlich jede Teilfunktion verwenden, sie zu Option heben und in der Lage sein, Informationen über die Definition der Funktion und ihren Wert zu finden.
versuche das:
%Vor%Dann können Sie in Ihrer Fallanweisung Folgendes tun:
%Vor%Tags und Links scala scope pattern-matching case partialfunction