Métatables
Les métatables sont la méthode Lua pour créer des objets et modifier le comportement d'opérateurs tels que +, -, [], etc.
Chaque valeur en Lua peut avoir une métabase. Cette méta-table est un tableau Lua ordinaire qui définit le comportement de la valeur originale sous certaines opérations spéciales. Vous pouvez modifier plusieurs aspects du comportement des opérations sur une valeur en définissant des champs spécifiques dans sa métabase. Par exemple, lorsqu'une valeur non numérique est l'opérande d'une addition, Lua recherche une fonction dans le champ " "__add" de sa métabase. S'il en trouve un, Lua appelle cette fonction pour effectuer l'addition.
Nous appelons les clés d'une métabase des événements et les valeurs des métaméthodes. Dans l'exemple précédent, l'événement est " "add" et la métaméthode est la fonction qui effectue l'addition.
Les tables et les données utilisateur complètes ont des métatables individuelles (bien que plusieurs tables et données utilisateur puissent partager leurs métatables). Les valeurs de tous les autres types partagent une seule métabase par type, c'est-à-dire qu'il y a une seule métabase pour tous les nombres, une pour toutes les chaînes de caractères, etc.
Une métabalise contrôle le comportement d'un objet dans les opérations arithmétiques, les comparaisons d'ordre, la concaténation, les opérations de longueur et l'indexation. Pour chacune de ces opérations, Lua associe une clé spécifique appelée événement. Lorsque Lua effectue l'une de ces opérations sur une valeur, il vérifie si cette valeur a une méta-table avec l'événement correspondant. Si c'est le cas, la valeur associée à cette clé (la métaméthode) détermine la manière dont Lua va effectuer l'opération.
Les métatables contrôlent les opérations énumérées ci-dessous. Chaque opération est identifiée par son nom. La clé de chaque opération est une chaîne de caractères dont le nom est précédé de deux traits de soulignement, ''__; par exemple, la clé de l'opération "ajouter" est la chaîne de caractères " "__add". La sémantique de ces opérations est mieux expliquée par une fonction Lua décrivant comment l'interpréteur exécute l'opération.