Gibt es eine Möglichkeit, ein PartialFunction
zu erstellen, außer über die case
-Anweisung?
Ich bin neugierig, weil ich folgendes ausdrücken möchte (scala pseudo ahead!) ...
%Vor%... als Teilfunktion und tun
%Vor% scheint redundant zu sein, da ich ein BigInt
zweimal erstellt habe.
Nicht sicher, dass ich die Frage verstehe. Aber hier ist mein Versuch: Warum nicht einen Extraktor erstellen?
%Vor% Die andere Option ist (und das kann die Frage beantworten, ob man PartialFunction
anders als mit case
literal erstellen kann):
Da die Idee einer partiellen Funktion jedoch darin besteht, dass sie nur teilweise definiert ist, werden Sie am Ende immer noch überflüssige Dinge tun. Sie müssen ein großes int erstellen, um zu testen, ob es gültig ist, und dann in der von Ihnen erstellten Funktionsanwendung der große Int wieder ...
Ich habe ein Projekt bei Github gesehen, das versucht hat, das Problem zu umgehen, indem es die Ergebnisse von isDefinedAt
etwas zwischenspeichert. . Wenn Sie zu den Benchmarks gehen, sehen Sie, dass es langsamer als die Standard-Scala-Implementierung war:)
Wenn Sie also die doppelte Natur von isDefinedAt
versus apply
umgehen wollen, sollten Sie direkt zu einer (vollständigen) Funktion gehen, die ein Option[Int]
als Ergebnis liefert.
Ich denke, Sie suchen nach dem Heben / Demontieren. Lift nimmt eine Teilfunktion und wandelt sie in eine Funktion um, die eine Option zurückgibt. Unlift nimmt eine Funktion mit einem Argument, das eine Option zurückgibt und eine Teilfunktion zurückgibt.
%Vor%In engem Zusammenhang mit dieser Antwort möchten Sie auch sehen für Informationen zu cond und condOpt:
%Vor% Sie können ein PartialFunction
"longhand" schreiben, wenn Sie möchten:
Tags und Links scala pattern-matching extractor partialfunction