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.