Metatabellen
Metatabellen bilden die Lua-Methode für das Erstellen von Objekten und das Ändern des Verhaltens von Operatoren wie beispielsweise +, -, [] usw.
Jeder Wert in Lua kann eine Metatabelle aufweisen. Bei dieser Metatabelle handelt es sich um eine gewöhnliche Lua-Tabelle, die das Verhalten des ursprünglichen Wertes bei bestimmten speziellen Operationen definiert. Sie können verschiedene Aspekte des Verhaltens von Operationen in Bezug auf einen Wert ändern, indem Sie bestimmte Felder in der zugehörigen Metatabelle festlegen. Wenn beispielsweise ein nicht numerischer Wert als Operand einer Addition dient, prüft Lua auf eine Funktion im Feld "__add" in der zugehörigen Metatabelle. Ist eine Funktion vorhanden, ruft Lua diese Funktion auf, um die Addition auszuführen.
In einer Metatabelle werden die Schlüssel als Ereignisse und die Werte als Metamethoden bezeichnet. Im vorherigen Beispiel ist "add" das Ereignis und die Metamethode die Funktion, die die Addition ausführt.
Tabellen und vollständige Benutzerdaten weisen individuelle Metatabellen auf (obwohl mehrere Tabellen und Benutzerdaten ihre Metatabellen gemeinsam nutzen können). Werte aller anderen Typen nutzen eine einzelne Metatabelle pro Typ gemeinsam, d. h., es gibt eine einzelne Metatabelle für alle Zahlen, eine einzelne Metatabelle für alle Zeichenfolgen usw.
Eine Metatabelle steuert, wie sich ein Objekt in Rechenoperationen, Sortiervergleichen, bei der Verkettung, bei einer Längenoperation und bei der Indexierung verhält. Für jede dieser Operationen ordnet Lua einen bestimmten Schlüssel zu, der als Ereignis bezeichnet wird. Wenn Lua eine dieser Operationen für einen Wert ausführt, wird geprüft, ob für diesen Wert eine Metatabelle mit dem entsprechenden Ereignis vorhanden ist. Ist dies der Fall, steuert der dem Schlüssel (Metamethode) zugeordnete Wert, wie Lua die Operation ausführt.
Metatabellen steuern die im Anschluss aufgeführten Operationen. Jede Operation wird durch den entsprechenden Namen angegeben. Der Schlüssel für jede Operation ist eine Zeichenfolge, deren Namen zwei Unterstriche ('__') als Präfix vorangestellt werden; der Schlüssel für die Operation "add" beispielsweise ist die Zeichenfolge "__add". Die Semantik dieser Operationen wird durch eine Lua-Funktion besser erläutert, die beschreibt, wie der Interpreter die Operation ausführt.