Menu
Coddy logo textTech

setmetatable & getmetatable

Teil des Abschnitts Logik & Programmablauf der Lua-Journey von Coddy. Lektion 17 von 54.

Nachdem Sie nun verstanden haben, was Metatabellen konzeptionell sind, ist es an der Zeit zu lernen, wie man tatsächlich mit ihnen arbeitet. Lua bietet hierfür zwei wesentliche Funktionen: setmetatable(), um einer Tabelle eine Metatabelle zuzuweisen, und getmetatable(), um diese abzurufen.

Um eine Metatabelle an eine Tabelle anzuhängen, verwendest du setmetatable(). Diese Funktion nimmt zwei Argumente entgegen: die Tabelle, die du ändern möchtest (die Haupttabelle), und die Metatabelle, die du daran anhängen möchtest:

local myTable = {name = "Alice"}
local myMetatable = {}

setmetatable(myTable, myMetatable)

In diesem Beispiel ist myMetatable nun mit myTable verknüpft. Die Metatabelle selbst ist vorerst leer, aber dies stellt die Verbindung zwischen den beiden Tabellen her. Die setmetatable()-Funktion gibt auch die Haupttabelle zurück, was es Ihnen ermöglicht, die Operation bei Bedarf zu verketten.

Um die Metatabelle abzurufen, die mit einer Tabelle verknüpft ist, verwenden Sie getmetatable():

local retrievedMeta = getmetatable(myTable)
print(retrievedMeta == myMetatable)  -- Ausgabe: true

Diese Funktion gibt die Metatabelle zurück, wenn eine angehängt ist, oder nil, wenn die Tabelle keine Metatabelle hat. Dies ist nützlich, wenn Sie die Metatabelle einer Tabelle prüfen oder ändern müssen, nachdem sie gesetzt wurde.

Das Verständnis dieser beiden Funktionen ist die Grundlage für die gesamte Arbeit mit Metatabellen in Lua. Sobald Sie Metatabellen anhängen und abrufen können, sind Sie bereit, Metamethoden zu definieren, die das Verhalten Ihrer Tabellen ändern.

challenge icon

Aufgabe

Einfach

Schreibe eine Funktion attachMetatable, die mainTable und metaTable übernimmt und true zurückgibt, wenn die Metatabelle erfolgreich angehängt wurde.

Verwende setmetatable(), um die Metatabelle an die Haupttabelle anzuhängen, und überprüfe anschließend die Verknüpfung mit getmetatable().

Logik:

  • Hänge metaTable mithilfe von setmetatable() an mainTable an
  • Rufe die angehängte Metatabelle mithilfe von getmetatable() ab
  • Vergleiche die abgerufene Metatabelle mit der ursprünglichen metaTable
  • Gib true zurück, wenn sie übereinstimmen, andernfalls false

Parameter:

  • mainTable (Tabelle): Die Tabelle, an die die Metatabelle angehängt wird
  • metaTable (Tabelle): Die anzuhängende Metatabelle

Rückgabewert: true, wenn die Metatabelle erfolgreich angehängt und überprüft wurde, andernfalls false (boolesch)

Probier es selbst

function attachMetatable(mainTable, metaTable)
    -- Schreibe hier den Code
end
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Programmablauf

Übe selbstständig: Online-Lua-Compiler