Was ist eine Metatable?
Teil des Abschnitts Logic & Flow der Lua-Journey von Coddy — Lektion 16 von 54.
Eine Metatabelle ist einfach eine gewöhnliche Lua-Tabelle, aber sie hat einen speziellen Zweck. Wenn du eine Metatabelle an eine andere Tabelle anhängst (nennen wir sie die „Haupttabelle“), kannst du ändern, wie sich diese Haupttabelle verhält, wenn bestimmte Operationen auf ihr ausgeführt werden.
Stellen Sie es sich so vor: Normalerweise, wenn Sie versuchen, zwei Tabellen mit dem +-Operator zu addieren, weiß Lua nicht, was zu tun ist, und gibt eine Fehlermeldung aus. Aber mit einer Metatable können Sie definieren, was Addition für Ihre Tabellen bedeutet. Sie könnten festlegen, dass entsprechende Werte addiert werden, deren Inhalte verkettet werden oder irgendetwas anderes tun, das für Ihr Programm sinnvoll ist.
Metatabellen funktionieren durch das Definieren spezieller Funktionen, die Metamethoden genannt werden. Diese Metamethoden haben spezifische Namen, die mit zwei Unterstrichen beginnen, wie __add für die Addition oder __index für das Nachschlagen fehlender Schlüssel. Wenn Lua auf eine Operation an einer Tabelle stößt, die eine Metatabelle hat, prüft es, ob die Metatabelle die entsprechende Metamethode besitzt, und verwendet diese, um zu bestimmen, was passieren soll.
Dieses Konzept eröffnet Möglichkeiten wie das Erstellen benutzerdefinierter Datentypen mit eigenem Verhalten, das Implementieren objektorientierter Muster, das Schützen von Tabellen vor unerwünschten Änderungen und vieles mehr. In den kommenden Lektionen wirst du lernen, wie man Metatabellen an Tabellen anhängt und Metamethoden verwendet, um deren Verhalten anzupassen.
Spickzettel
Eine Metatabelle ist eine reguläre Lua-Tabelle, die an eine andere Tabelle angehängt werden kann, um deren Verhalten bei bestimmten Operationen zu ändern.
Metatabellen verwenden spezielle Funktionen namens Metamethoden, deren Namen mit zwei Unterstrichen beginnen:
__add- definiert das Additionsverhalten__index- definiert das Verhalten beim Nachschlagen fehlender Schlüssel
Wenn eine Operation an einer Tabelle mit einer Metatabelle durchgeführt wird, prüft Lua nach der entsprechenden Metamethode und verwendet diese, um das Verhalten zu bestimmen.
Metatabellen ermöglichen:
- Das Erstellen benutzerdefinierter Datentypen mit spezifischem Verhalten
- Das Implementieren objektorientierter Muster
- Das Schützen von Tabellen vor unerwünschten Änderungen
Probier es selbst
Diese Lektion enthält keine Programmieraufgabe.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logic & Flow
1Fortgeschrittene Table-Iteration
Iterieren mit pairs()Iterieren mit ipairs()pairs() vs. ipairs()Zusammenfassung – Charakterbogen4Einführung in Metatables
Was ist eine Metatable?setmetatable & getmetatableDie __index-MetamethodeDie __newindex-MetamethodeDie __tostring-MetamethodeArithmetische Metamethoden Teil 1Arithmetische Metamethoden Teil 2Zusammenfassung – Schreibgeschützte Tabellen7Fortgeschrittene String-Manipulation
string.gsub() für ErsetzungenEinführung in String-Patternsstring.find()string.match()Iterieren mit string.gmatch()Rückblick – Log-File-Parser2Weitere Funktionen der Table-Bibliothek
table.concat()Tabellenerstellung & unpack()table.sort()Benutzerdefiniertes Sortieren mit FunktionenRückblick – Highscore-Tabelle