Scala Pattern Matching mit Sets

8

Das Folgende funktioniert nicht.

%Vor%
  

Fehler: nicht gefunden: Typ xs

Wie kann ich Muster über eine Menge anpassen?

    
Kevin Meredith 01.03.2013, 17:53
quelle

4 Antworten

15

Nun, x:xs bedeutet x vom Typ xs , also würde es nicht funktionieren. Leider können Sie keine Match-Sets erstellen, da die Sets keine definierte Reihenfolge haben. Oder, pragmatischer, weil es keinen Extraktor für Set gibt.

Sie können jedoch immer Ihre eigenen definieren:

%Vor%

Zum Beispiel:

%Vor%     
Daniel C. Sobral 01.03.2013, 21:44
quelle
5

Set ist kein case class und hat keine unapply Methode.

Diese beiden Dinge implizieren, dass Sie nicht direkt auf ein Set Muster zuordnen können.
( update : es sei denn, Sie definieren Ihren eigenen Extraktor für Set , wie Daniel in seiner Antwort korrekt zeigt)

Sie sollten eine Alternative finden, ich würde vorschlagen, eine Faltfunktion

zu verwenden %Vor%

Dies wird die Elemente von s über t akkumulieren und sie einzeln hinzufügen

falten

Hier finden Sie die Dokumentation für den Falzvorgang, falls erforderlich als Referenz:

%Vor%

Wendet einen binären Operator auf einen Startwert und alle Elemente dieses Satzes an, wobei er von links nach rechts geht.

Hinweis: Gibt möglicherweise unterschiedliche Ergebnisse für verschiedene Ausführungen zurück, es sei denn, der zugrunde liegende Auflistungstyp ist geordnet. oder der Operator ist assoziativ und kommutativ.

%Vor%     
pagoda_5b 01.03.2013 18:02
quelle
4

Zunächst wird Ihr isEmpty jedes Set abfangen, da es in diesem Kontext eine Variable ist. Konstanten beginnen mit einem Großbuchstaben in Scala und werden nur als Konstanten behandelt, wenn diese Bedingung zutrifft. Kleinbuchstaben werden Set zu isEmpty zuweisen (hast du nach EmptySet gesucht?)

Wie man hier sieht, scheint der Mustervergleich für Set s nicht sehr vorzuziehen. Sie sollten das Set wahrscheinlich explizit in ein List oder Seq ( toList / toSeq )

umwandeln %Vor%     
Danyel 01.03.2013 17:59
quelle
1

Das kann ich mir vorstellen:

%Vor%     
Peter Schmitz 02.10.2013 20:28
quelle

Tags und Links