Quelle est l'interface C à Lua pour accéder à clés / paires de valeurs d'une table?
-
12-09-2019 - |
Question
Dans Lua, en utilisant le C Interface, étant donné une table, comment puis-je itérer les paires clé / valeur de la table?
En outre, si certains membres de la table de table sont ajoutés à l'aide des tableaux, ai-je besoin d'une boucle séparée pour itérer ceux aussi bien ou est-il un moyen unique pour itérer si les membres en même temps que les paires clé / valeur?
La solution
lua_next()
est la même chose que la fonction next()
de Lua, qui est utilisé par la fonction pairs()
. Elle parcourt tous les membres, les deux dans la partie du tableau et la partie de hachage.
Si vous voulez l'analogue de ipairs()
, le lua_objlen()
vous donne les mêmes fonctionnalités que #
. Utilisez-le et lua_rawgeti()
itérer numériquement sur la partie de tableau.
Autres conseils
Comme dit Javier, vous voulez que la fonction lua_next()
. Je pensais un exemple de code pourrait aider à rendre les choses plus claires car cela peut être un peu difficile à utiliser au premier coup d'œil.
Je cite le manuel:
Un traversal typique ressemble à ceci:
/* table is in the stack at index 't' */ lua_pushnil(L); /* first key */ while (lua_next(L, t) != 0) { /* uses 'key' (at index -2) and 'value' (at index -1) */ printf("%s - %s\n", lua_typename(L, lua_type(L, -2)), lua_typename(L, lua_type(L, -1))); /* removes 'value'; keeps 'key' for next iteration */ lua_pop(L, 1); }
Sachez que lua_next()
est très sensible à la valeur de clé à gauche sur la pile. Ne pas appel lua_tolstring()
sur la clé que si elle est vraiment déjà une chaîne parce que fonction remplacer la valeur convertit.