scala Fall Klassen Fragen

8

Ich habe zwei Fragen bezüglich der '::' Fallklasse.

:: kann als

verwendet werden %Vor%

Wie funktioniert es? Was ist genau der Ablauf, den Scala verwendet, um eine List-Instanz mit der :: case-Klasse abzugleichen? Da ich eine Klasse MyClass mit operator op habe, kann ich eine Case-Klasse mit dem Namen op erstellen, die ich wie folgt verwenden kann:

%Vor%

?

    
IttayD 05.10.2009, 16:16
quelle

4 Antworten

5
%Vor%     
Eastsun 05.10.2009, 17:04
quelle
3

Es ist detailliert auf Seite 301 von Programmierung in Scala , Über Mustervergleich auf List s.

  

Das "cons" -Muster x :: xs ist ein Spezialfall eines Infixes   Betriebsmuster. Das weißt du bereits, wenn du es als Ausdruck siehst,   Eine Infix-Operation entspricht einem Methodenaufruf. Für Muster die Regeln   sind unterschiedlich: Wenn sie als Muster betrachtet werden, wird ein Infix-Vorgang wie p op q   entspricht op(p, q) .   Das heißt, der Infix-Operator op wird als Konstruktormuster behandelt.   Insbesondere wird ein Betrugsmuster wie x :: xs als ::(x, xs) behandelt.   Dies deutet darauf hin, dass es eine Klasse namens :: geben sollte, die dem Muster entspricht   Konstrukteur. Tatsächlich gibt es eine solche Klasse.   Es heißt scala.:: und ist genau die Klasse, die nicht leere Listen erstellt.

    
Eugene Yokota 06.10.2009 05:25
quelle
2

Tatsächlich ist die Tatsache, dass :: eine Fallklasse ist, nur die Hälfte der Antwort. Der Grund dafür ist, dass es einen Extraktor für object :: gibt, der automatisch generiert wird, wenn eine Fallklasse definiert wird. Praktischerweise gibt ::. Unapply eine List zurück, weil :: List erweitert. Wenn Sie denselben Trick für Listen verwenden möchten, können Sie List jedoch nicht erweitern, da es final ist. Was Sie tun können, ist ein Objekt mit der entsprechenden Nichtanwendungsmethode zu definieren, die die erwartete Rücksignatur aufweist. Um beispielsweise das letzte Element einer Liste zu vergleichen, können Sie Folgendes tun:

%Vor%

Der Extraktor muss eine Option zurückgeben, die ein Tupel der beiden dekonstruierten Elemente enthält.

    
vdichev 06.10.2009 14:07
quelle
0

Der von eed3si9n zitierte Text steht auf p. 331 in der PDF-Ausgabe von "Programming in Scala" (1. Aufl.)

    
Eugen Labun 19.12.2010 21:24
quelle

Tags und Links