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%Gibt es eine Möglichkeit, ein %code% zu erstellen, außer über die %code% -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 %code% zweimal erstellt habe.
Sie können ein %code% "longhand" schreiben, wenn Sie möchten:
%Vor%Okay, ich habe das
%Vor%Wie wäre es damit?
%Vor%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 %code% anders als mit %code% literal erstellen kann):
%Vor%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 %code% 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 %code% versus %code% umgehen wollen, sollten Sie direkt zu einer (vollständigen) Funktion gehen, die ein %code% als Ergebnis liefert.