Hauptinhalt

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 = 

    Tuesday

Konvertieren 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 =

     1

Sie können das Aufzählungselement auch als direkte Eingabe für die Methode verwenden:

isMeetingDay(WeekDays.Wednesday)
ans =

     0

Definieren 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 =

     1

Da 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

Siehe auch

Themen