Lua: Le tutoriel  wxWidgets
Lua
Les métatables: C'est bien tout ça, mais... ça sert à quoi?

Les tables en Lua ont habituellement un ensemble d'opérations assez prévisible.
Vous pouvez ajouter des paires clé-valeur, vous pouvez vérifier la valeur associée à une clé, vous pouvez traverser toutes les paires clé-valeur, et vous pouvez... Oups!, mais, c'est tout.

Vous ne pouvez pas, par exemple additionner des tables, comparer les tables entre elles, ou appeler une table.

C'est là que les métatables et leurs métaméthodes interviennent.

Car si la table t1 est mise en jeu dans une opération qu'elle ne sait pas faire, alors sa métatable mt lui indiquera la marche à suivre.

Une métatable contrôle comment un objet se comporte dans les opérations arithmétiques, dans les comparaisons, la concaténation, les opérations "length", et d'indexation.
Chaque opération est identifiée par son nom correspondant.
La clé, pour chaque opération est une chaîne avec son nom précédé de deux caractères de soulignement, __xyz
Par exemple, la clé de l'opération "addition", est la chaîne "__add".

Les métatables vont vous permettre de changer le comportement initial d'une table.

Par exemple, en utilisant les métatables, vous pourrez définir comment Lua calculera l'expression a + b, si a et b sont des tables...
Quand Lua essaye d'ajouter deux tables, il vérifie si l'une d'elle a une métatable et si cette métatable possède un champ __add.
Si Lua trouve ce champ, alors il appelle la valeur correspondante pour calculer la somme.

  • Une métatable est donc une simple table qui va mettre en place des
    fonctionnalités spéciales appelées métaméthodes.
  • Si une table possède une métatable, alors la métatable indique la
    procédure à suivre dans le cas où cette table est mise en jeu dans
    une opération non supportée par défaut, si et seulement si ce cas
    de figure a déjà été prédéfini dans la métatable par le codeur.
  • Lorsque l'on crée une table, par défaut, elle ne possède pas de
    métatable.
  • Une table peut avoir tout au plus une et une seule métatable.
    En revanche, une table peut être la métatable de plusieurs tables.
  • La métatable elle-même peut avoir une métatable, puisqu'elle n'est
    qu'une table.
  • Une table peut être sa propre métatable.
logo wxWidgets Le savoir ne vaut que s'il est partagé par tous...
logo-internet_32x32.png Dernière mise à jour, le 4 décembre 2012.
Valid XHTML 1.0 Transitional

wxlualogo
Flèche haut
Flèche gauche
Flèche haut
Flèche droite