Scala - Bezeichnung eines übereinstimmenden Elements im Mustervergleich

8

Ich habe den folgenden Code:

%Vor%

Die Fragen sind:

1) Wenn ein Mustervergleich mit einem Schaf erfolgreich ist, wie kann ich darauf zugreifen und es ändern? Es beschwerte sich über die Neuzuweisung zu val, und ich habe dann var in den Konstruktor gesetzt, aber immer noch ...

2) Ein weiterer Weg, den ich mir vorstellen kann, besteht darin, den gesamten übereinstimmenden Wert einer Variablen zuzuordnen. Gibt es eine Möglichkeit, einen Wert, der durch ein Fallklassen-Konstruktormuster übereinstimmt, an eine Variable zu binden?

(Ich weiß, dass ich wahrscheinlich eine Übereinstimmung mit etwas wie s: Sheep erstellen und dann s.changeHairTo(None) aufrufen könnte, aber das ist der am wenigsten bevorzugte Weg).

    
noncom 10.03.2012, 08:33
quelle

2 Antworten

25

Sie können @ verwenden, um das gesamte Muster an die Variable in Ihrer Version zu binden

%Vor%

Sie müssen jedoch var nicht verwenden. Hier ist eine funktionalere Version Ihres Snippets. what gibt hier nur Sheep mit None Hair nach dem Schneiden zurück.

%Vor%     
4e6 10.03.2012, 09:13
quelle
4

Das funktioniert nicht, weil in dem Muster die Var "Haare" nur aus dem Sheep-Objekt extrahiert werden, also ist es nicht das Feld von Sheep, sondern eine Variable im Kontext des Case-Blocks. Du könntest es so machen:

%Vor%

Sagen Sie Animal, dass es ein veränderliches Feldhaar hat und Sie es einstellen können, ohne es auf den richtigen Typ zu werfen.

    
drexin 10.03.2012 09:10
quelle

Tags und Links