scala match case mit :: für Listen

7

Gegeben diese Musterübereinstimmung:

%Vor%

Ich nehme an, dass "::" die Fallklasse ist, die in scala.collection.immutable gefunden wird, aber wie soll '::' in dieser Form geschrieben werden (Infix-Notation)? - Gibt es dafür eine spezielle Regel?

Danke

    
Dzhu 29.12.2011, 08:38
quelle

2 Antworten

25

Sie können sogar schreiben:

%Vor%

Grundsätzlich kann alles, wo ein Muster erwartet wird (eine Zuweisung, eine match Anweisung oder eine Zeile zum Verständnis), einen Extraktor annehmen, der definiert ist als eine Entität mit einer unapply -Methode.

Einer der Bestandteile von syntaktischem Zucker , den Sie mit scala erhalten, ist das; Wenn Sie einen Extraktor X(a, b) haben, kann dies als a X b geschrieben werden. Hier ist ein Beispiel mit Fallklassen (mit einem Standard-Extraktor):

%Vor%

Die Fähigkeit, solche Entitäten zu schreiben infix erstreckt sich auch auf Typen:

%Vor%

Beachten Sie, dass scala in keinem Fall solche Infix-Operatoren auf symbolische Bezeichner einschränkt

    
oxbow_lakes 29.12.2011, 09:08
quelle
2

Scala hat tatsächlich eine unveränderliche Klasse :: , die die nicht leere Liste darstellt (das Komplement zu Nil ). Es gibt eine Infix-Notation für Klassen (das ist auch, wie Dinge wie A <:< B work), was es dir erlaubt, head :: tail anstatt ::(head, tail) zu schreiben. Da :: eine Case-Klasse ist, hat sie einen Standard unapply , was case zur Veranschaulichung beiträgt.

    
Ben Jackson 29.12.2011 08:45
quelle

Tags und Links