Definieren von Aufzählungsklassen
Aufzählungsklasse
Erstellen Sie eine Aufzählungsklasse, indem Sie einen enumeration-Block zu einer Klassendefinition hinzufügen. Die Klasse WeekDays listet beispielsweise eine Reihe von Wochentagen auf.
classdef WeekDays enumeration Monday, Tuesday, Wednesday, Thursday, Friday end end
Um den MATLAB®-Code in den folgenden Abschnitten auszuführen, platzieren Sie die Klassendefinition WeekDays in einer .m-Datei in Ihrem Pfad.
Konstruieren eines Aufzählungselements
Verweisen Sie auf ein Aufzählungselement unter Verwendung des Klassennamens und des Elementnamens:
ClassName.MemberName
Weisen Sie beispielsweise das Aufzählungselement WeekDays.Tuesday der Variablen today zu:
today = WeekDays.Tuesday;
today ist eine Variable der Klasse WeekDays:
whos
Name Size Bytes Class Attributes today 1x1 104 WeekDays
today
today =
TuesdayKonvertieren in Oberklassenwert
Wenn eine Aufzählungsklasse eine Oberklasse angibt, können Sie ein Aufzählungsobjekt in die Oberklasse konvertieren, indem Sie das Objekt an den Konstruktor der Oberklasse übergeben. Der Konstruktor der Oberklasse muss jedoch in der Lage sein, seine eigene Klasse als Eingabe zu akzeptieren und eine Instanz der Oberklasse zurückzugeben. In MATLAB integrierte numerische Klassen, wie z. B. uint32, ermöglichen diese Konvertierung.
Beispielsweise leitet sich die Klasse Bearing von der integrierten Klasse uint32 ab:
classdef Bearing < uint32 enumeration North (0) East (90) South (180) West (270) end end
Weisen Sie das Element Bearing.East der Variablen a zu:
a = Bearing.East;
Übergeben Sie a an den Konstruktor der Oberklasse und geben Sie einen uint32-Wert zurück:
b = uint32(a); whos
Name Size Bytes Class Attributes a 1x1 4 Bearing b 1x1 4 uint32
Der Konstruktor uint32 akzeptiert ein Objekt der Unterklasse Bearing und gibt ein Objekt der Klasse uint32 zurück.
Definieren von Methoden in Aufzählungsklassen
Definieren Sie Methoden in einer Aufzählungsklasse wie in jeder anderen MATLAB-Klasse. Definieren Sie beispielsweise eine Methode namens isMeetingDay für die Aufzählungsklasse WeekDays. Der Anwendungsfall ist, dass der Benutzer jeden Dienstag ein wiederkehrendes Meeting hat. Die Methode überprüft, ob das Eingabeargument eine Instanz des WeekDays-Elements Tuesday ist.
classdef WeekDays enumeration Monday, Tuesday, Wednesday, Thursday, Friday end methods function tf = isMeetingDay(obj) tf = WeekDays.Tuesday == obj; end end end
Rufen Sie isMeetingDay mit einer Instanz der Klasse WeekDays auf:
today = WeekDays.Tuesday; today.isMeetingDay
ans =
1Sie können das Aufzählungselement auch als direkte Eingabe für die Methode verwenden:
isMeetingDay(WeekDays.Wednesday)
ans =
0Definieren von Eigenschaften in Aufzählungsklassen
Fügen Sie einer Aufzählungsklasse Eigenschaften hinzu, wenn Sie Daten speichern müssen, die sich auf die Aufzählungselemente beziehen. Legen Sie die Eigenschaftswerte im Klassenkonstruktor fest. Beispielsweise definiert die Klasse SyntaxColors drei Eigenschaften. Der Klassenkonstruktor weist die Werte der Eingabeargumente den entsprechenden Eigenschaften zu, wenn Sie auf ein Klassenelement verweisen.
classdef SyntaxColors properties R G B end methods function c = SyntaxColors(r, g, b) c.R = r; c.G = g; c.B = b; end end enumeration Error (1, 0, 0) Comment (0, 1, 0) Keyword (0, 0, 1) String (1, 0, 1) end end
Wenn Sie auf ein Aufzählungselement verweisen, initialisiert der Konstruktor die Eigenschaftswerte:
e = SyntaxColors.Error; e.R
ans =
1Da SyntaxColors eine Wertklasse ist (sie leitet sich nicht von handle ab), kann nur der Klassenkonstruktor Eigenschaftswerte festlegen:
e.R = 0
You cannot set the read-only property 'R' of SyntaxColors.
Weitere Informationen zu Aufzählungsklassen, die Eigenschaften definieren, finden Sie unter Mutable Handle vs. Immutable Value Enumeration Members.
Aufrufsequenz des Konstruktors der Aufzählungsklasse
Jede Anweisung in einem Aufzählungsblock ist der Name eines Aufzählungselements, optional gefolgt von einer Argumentliste. Wenn die Aufzählungsklasse einen Konstruktor definiert, ruft MATLAB den Konstruktor auf, um die aufgezählten Instanzen zu erstellen.
MATLAB stellt einen Standardkonstruktor für alle Aufzählungsklassen bereit, die keinen expliziten Konstruktor definieren. Der Standardkonstruktor erstellt eine Instanz der Aufzählungsklasse:
Keine Verwendung von Eingabeargumenten, wenn das Aufzählungselement keine Eingabeargumente definiert
Verwendung der in der Aufzählungsklasse für dieses Element definierten Eingabeargumente
Beispielsweise sind die Eingabeargumente für die Klasse Bool 0 für Bool.No und 1 für Bool.Yes.
classdef Bool < logical enumeration No (0) Yes (1) end end
Die Werte von 0 und 1 gehören zur Klasse logical, da der Standardkonstruktor das Argument an die erste Oberklasse übergibt. Das heißt, diese Aussage:
n = Bool.No;
Führt zu einem Aufruf von logical, der der folgenden Anweisung in einem Konstruktor entspricht:
function obj = Bool(val) obj@logical(val) end
MATLAB übergibt das Elementargument nur an die erste Oberklasse. Nehmen wir beispielsweise an, dass Bool von einer anderen Klasse abgeleitet ist:
classdef Bool < logical & MyBool enumeration No (0) Yes (1) end end
Die Klasse MyBool kann einige spezielle Funktionen hinzufügen:
classdef MyBool methods function boolValues = testBools(obj) ... end end end
Der Standardkonstruktor Bool verhält sich so, als wäre er wie diese Funktion definiert:
Argument wird an den Konstruktor der ersten Oberklasse übergeben
Keine Argumente werden an nachfolgende Konstruktoren übergeben
function obj = Bool(val) obj@logical(val) obj@MyBool end