Lua: Le tutoriel  wxWidgets
Lua
Les métatables: Et ça fonctionne comment?
Une forme séquentielle donnerait ceci:
- Soit la table indexée suivante: maTable[1]
- LUA recherche dans maTable une entrée avec une clé égale à 1.
- La valeur est trouvée: Lua retourne la valeur.
- La valeur n'est pas trouvée: Lua retourne nil

Tous ceci semble logique... et pourtant, c'est faux! ou plus exactement ce n'est pas tout à fait exact.

Explication.
Si la valeur n'est pas trouvée, alors LUA recherchera dans une métatable.
Car si LUA ne sait plus comment faire avec un "objet", alors il fait appel à "sa métatable" pour l'aider.

Regardez maintenant le code suivant:
maTable = {
	  a = 1,
	  b = 2,
	  }
	maMetaTable = {}
	function maMetaTable.__index(la_table, la_key)
	  print(la_table, la_key)
	  return 666
	end
	setmetatable(maTable, maMetaTable)
				

Supposez que vous vouliez voir le contenu de ( maTable.a )
LUA va chercher dans la table, trouver ce que vous lui demandez et retourner le chiffre "1".

Maintenant vous voulez voir ( maTable.c )
LUA va chercher dans la table ce que vous lui demandez, mais ne va rien trouver, puisque "c" n'existe pas, mais avant de vous retourner nil, LUA ira chercher dans sa métatable...( si cette dernière existe )

Maintenant, LUA appelle la fonction maMetaTable__index.
"la_table" est l'argument de la table qui a été indexé et "la_key" est la clé qui va essayer de lire la table.
La valeur qui sera retournée est celle que la fonction indexée retournera et dans ce cas: "0"
En tout état de cause, LUA imprimera donc "la_table", "la_key", et la valeur "0", puisque "c" n'existe pas.


  1. Définir une métatable ainsi que son comportement. ( ce qu'elle doit faire. )
  2. L'associer à une table. ( setmetatable(table, metatable) )

Tout ceci ne sert évidement à rien, sinon qu'à montrer le fonctionnement de base d'une 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
Connexion à la base de données impossible