Menu
Coddy logo textTech

setmetatable & getmetatable

Teil des Abschnitts Logic & Flow 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 Metatable an eine Tabelle anzuhängen, verwenden Sie setmetatable(). Diese Funktion nimmt zwei Argumente entgegen: die Tabelle, die Sie ändern möchten (die Haupttabelle) und die Metatable, die Sie an sie anhängen möchten:

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

Schreiben Sie eine Funktion attachMetatable, die mainTable und metaTable entgegennimmt und true zurückgibt, wenn die Metatabelle erfolgreich zugewiesen wurde.

Verwenden Sie setmetatable(), um die Metatabelle der Haupttabelle zuzuweisen, und überprüfen Sie die Zuweisung anschließend mit getmetatable().

Logik:

  • Weisen Sie metaTable der mainTable mithilfe von setmetatable() zu
  • Rufen Sie die zugewiesene Metatabelle mit getmetatable() ab
  • Vergleichen Sie die abgerufene Metatabelle mit der ursprünglichen metaTable
  • Geben Sie true zurück, wenn sie übereinstimmen, andernfalls false

Parameter:

  • mainTable (table): Die Tabelle, der die Metatabelle zugewiesen wird
  • metaTable (table): Die zuzuweisende Metatabelle

Rückgabewert: true, wenn die Metatabelle erfolgreich zugewiesen und überprüft wurde, andernfalls false (boolean)

Spickzettel

Lua bietet zwei wesentliche Funktionen für die Arbeit mit Metatabellen:

setmetatable() - Verknüpft eine Metatabelle mit einer Tabelle. Erwartet zwei Argumente: die Haupttabelle und die zu verknüpfende Metatabelle. Gibt die Haupttabelle zurück.

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

setmetatable(myTable, myMetatable)

getmetatable() - Ruft die mit einer Tabelle verknüpfte Metatabelle ab. Gibt die Metatabelle zurück, falls eine verknüpft ist, oder nil, falls die Tabelle keine Metatabelle hat.

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

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 Logic & Flow