Comment utiliser lua_pop() fonctionnent-ils correctement?
Quelqu'un peut pls me dire comment utiliser lua_pop() fonctionne correctement en C++.
- Devrais-je l'appeler quand j'utilise un lua_get*() fonction ? comme.
lua_getglobal(L, "quelque chose");
lua_pop(L, 1);
ou comment l'utiliser ? Sera le garbage collector effacer ces trucs après le seuil ? Merci.
OriginalL'auteur Morpheus | 2009-08-01
Vous devez vous connecter pour publier un commentaire.
Vous appelez
lua_pop()
pour supprimer des éléments de la Lua pile. Pour des fonctions simples, cela peut être tout à fait inutile puisque le noyau va nettoyer la pile dans le cadre de la manipulation de la valeur de retour.Pour des fonctions plus complexes, et en particulier pour le code C qui est à remettre en Lua, vous aurez souvent besoin de la pop, les choses de la pile pour éviter que la pile de croître indéfiniment.
La
lua_getglobal()
fonction ajoute un élément de la pile lorsqu'elle est appelée, qui est soitnil
si le mondial n'existe pas, ou la valeur de la variable nommée globale. Avoir une copie de cette valeur sur la pile protège contre le garbage collector tant qu'il est là. Cette valeur doit rester sur la pile tant qu'il est en cours d'utilisation par le code C qui a récupéré, car si la mondiale ont été modifiés, la copie sur la pile pourrait être la seule référence.Si les tendances générales de l'aide mondiale sont quelque chose comme:
Dans le dernier exemple, je prends soin de copier le contenu de la chaîne, car le pointeur retourné par
lua_tostring()
n'est garanti que pour être valable aussi longtemps que la valeur reste sur la pile. La nécessite qu'un appelant decopyGlobalString()
est responsable de l'appelfree()
plus tard.Remarque aussi que les récentes éditions de la Lua manuel inclure une note avec chaque fonction qui identifie le nombre de pile entrées consommé, et le nombre poussé. Cela permet d'éviter inattendu de la croissance de la pile.
facepalm! De son mieux maintenant 😉
Hey! Merci pour l'aide. Et encore une question, Quelle est la différence entre un appel lua_call(L, 0, 0); et lua_pop(L,1); pour supprimer les FONCTIONS ?? Je veux dire, pourquoi avez-vous utilisé lua_call(L, 0, 0) plutôt que d'utiliser lua_pop(L,1) ?
Je suppose que la raison probable pour récupérer une valeur de la fonction à appeler la fonction, qui est ce que
lua_call(L,0,0)
dans l'exemple. La valeur de la fonction est appelée sans paramètres (le premier zéro) et son retour est ajusté à l'absence de valeurs (le deuxième zéro). Dans le code de production, vous pourriez préférerlua_pcall()
qui attrape tout jeté les erreurs du Lua côté.Puis-je poser une autre question ? Après l'appel d'une fonction lua à partir de C/C++ qui est responsable de la suppression de valeurs de retour ? est-il C++ ? Merci.
OriginalL'auteur RBerteig