Das Folgende funktioniert nicht.
%Vor%Fehler: nicht gefunden: Typ xs
Wie kann ich Muster über eine Menge anpassen?
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% 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% 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
)
Tags und Links scala pattern-matching