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.
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, 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.