Qu'est-ce qu'une Metatable ?
Fait partie de la section Logic & Flow du Journey Lua de Coddy — leçon 16 sur 54.
Une métatable est simplement une table Lua ordinaire, mais elle a un but spécial. Lorsque vous attachez une métatable à une autre table (appelons-la la table « principale »), vous pouvez modifier le comportement de cette table principale lorsque certaines opérations sont effectuées sur celle-ci.
Pensez-y de cette façon : normalement, si vous essayez d'additionner deux tables ensemble en utilisant l'opérateur +, Lua ne sait pas quoi faire et vous renverra une erreur. Mais avec une métatable, vous pouvez définir ce que l'addition signifie pour vos tables. Vous pourriez faire en sorte qu'elle additionne les valeurs correspondantes, concatène leurs contenus, ou fasse n'importe quoi d'autre qui ait du sens pour votre programme.
Les métatables fonctionnent en définissant des fonctions spéciales appelées métaméthodes. Ces métaméthodes ont des noms spécifiques qui commencent par deux tirets bas, comme __add pour l'addition ou __index pour la recherche de clés manquantes. Lorsque Lua rencontre une opération sur une table qui possède une métatable, il vérifie si la métatable contient la métaméthode correspondante et l'utilise pour déterminer ce qui doit se passer.
Ce concept ouvre des possibilités telles que la création de types de données personnalisés avec leurs propres comportements, l'implémentation de modèles orientés objet, la protection des tables contre les modifications indésirables, et bien plus encore. Dans les leçons à venir, vous apprendrez comment attacher des métatables aux tables et utiliser des métaméthodes pour personnaliser leur comportement.
Aide-mémoire
Une métatable est une table Lua ordinaire qui peut être attachée à une autre table pour modifier son comportement lors de certaines opérations.
Les métatables utilisent des fonctions spéciales appelées métaméthodes dont les noms commencent par deux underscores :
__add- définit le comportement de l'addition__index- définit le comportement pour la recherche de clés manquantes
Lorsqu'une opération est effectuée sur une table disposant d'une métatable, Lua recherche la métaméthode correspondante et l'utilise pour déterminer le comportement.
Les métatables permettent de :
- Créer des types de données personnalisés avec des comportements spécifiques
- Implémenter des modèles orientés objet
- Protéger les tables contre les modifications indésirables
Essayez vous-même
Cette leçon ne comprend pas de défi de code.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logic & Flow
1Itération avancée des tables
Itérer avec pairs()Itérer avec ipairs()pairs() vs. ipairs()Récapitulatif - Fiche de personnage4Introduction aux Metatables
Qu'est-ce qu'une Metatable ?setmetatable & getmetatableLa métaméthode __indexLa métaméthode __newindexLa métaméthode __tostringMétaméthodes arithmétiques - Partie 1Métaméthodes arithmétiques - Partie 2Récapitulatif - Table en lecture seule2Plus de fonctions de la bibliothèque table
table.concat()Construction de table & unpack()table.sort()Tri personnalisé avec des fonctionsRécapitulatif - Tableau des scores3Concepts avancés sur les fonctions
Retourner plusieurs valeursFonctions variadiques (...)Les fonctions comme valeurs de première classeFonctions anonymesQu'est-ce qu'une closure ?Récapitulatif - Gestionnaire d'événements simple