Scala, Teilfunktionen

8

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.

    
aioobe 14.04.2011, 18:44
quelle

5 Antworten

5

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):

%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 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.

    
0__ 14.04.2011 19:37
quelle
4

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%     
James Moore 15.11.2011 02:35
quelle
3

Sie können ein PartialFunction "longhand" schreiben, wenn Sie möchten:

%Vor%     
Alex Cruise 15.04.2011 00:36
quelle
1

Okay, ich habe das

%Vor%     
elbowich 06.03.2012 16:34
quelle
0

Wie wäre es damit?

%Vor%     
elbowich 15.09.2011 19:12
quelle