Musterübereinstimmung über Nicht-Fall-Klasse in Scala

7

Nehmen wir an, dass ich eine einfache Klasse habe (d. h. ich kann sie nicht ändern), die wie folgt definiert ist:

%Vor%

Ist es möglich, Instanzen dieser Klasse mit bestimmten Mustern zu vergleichen?

Ich möchte zum Beispiel Funktion implementieren:

%Vor%

... das price is {some value} für jedes price ausgibt, das in allen anderen Fällen value <= 9000 und price is over 9000 hat.

Zum Beispiel:

%Vor%

sollte drucken:

%Vor%

Wie kann ich printPrice mithilfe der Mustererkennung implementieren?

    
Eugene Loy 17.11.2013, 14:41
quelle

3 Antworten

2

Dachte über die Annahme von Flavian's Lösung nach, kam aber etwas besser auf die Idee.

So könnte man printPrice implementieren (ohne Wrapper-Objekte zu verwenden und die ursprüngliche Klasse zu ändern):

%Vor%

PS: Credits zu flavian, um zu zeigen, dass du if im Muster verwenden kannst. Upvoting Ihre Antwort dafür.

    
Eugene Loy 17.11.2013, 15:32
quelle
14

Sie können einen benutzerdefinierten Extraktor erstellen:

%Vor%

Für Fallklassen generiert der Compiler dies automatisch. Ich denke, in Ihrem Fall Extraktoren ist Overkill, aber möglicherweise ist es nur eine vereinfachte Probe.

    
Sergey Passichenko 17.11.2013 15:24
quelle
3

Sie könnten mit einem PIMP-Bibliotheksmuster davonkommen:

%Vor%

Der Sinn von case class besteht darin, Scala die apply -Methode und unapply Magie, die für die Mustererkennung verwendet werden, zu definieren.

    
flavian 17.11.2013 14:55
quelle

Tags und Links