lua_getmetatable
obtient la métatable associée à l'objet donné. Ceci est une caractéristique fondamentale; si cette fonction n'existait pas, il n'y aurait aucun moyen d'accéder à la métatable pour un objet donné.
luaL_getmetatable
fait partie d'une convention pour donner des types à des données utilisateur (objets C accessibles depuis Lua) ou à des classes de tables. Dans cette convention, vous ajoutez des tables au registre avec luaL_newmetatable
, puis utilisez ces tables pour représenter les métadonnées pour différents types de données/tables d'utilisateurs (lorsque vous en avez besoin, vous pouvez les lire dans le registre et les définir avec luaL_setmetatable
).
Ceci est une fonctionnalité de commodité seulement; et vous n'avez pas besoin de suivre cette convention si vous ne le souhaitez pas. Tout fonctionnera toujours si vous placez les tables de métadonnées quelque part qui ne sont pas dans le registre et les liez à vos données utilisateur avec lua_setmetatable
. Cela dit, si les fonctions luaL_*metatable
n'existaient pas, où placeriez-vous les tables que vous utilisiez pour représenter les différents types userdata/table; et comment les retrouveriez-vous quand vous en auriez besoin une seconde fois? Vous pouvez certainement résoudre ce problème d'une manière différente, mais pourquoi ne pas utiliser la convention prédéfinie si cela fonctionne pour vous.