2017-09-05 2 views
1
  1. un retour de la fonction Lua deux nombres
  2. C++ appelle la fonction Lua: foo
  3. Je ne sais pas s'il est nécessaire de la pop la valeur de retour de la fonction foo (lua_pop (L, 2);) .
  4. s'il vous plaît dites-moi comment le faire et pourquoi. Merci beaucoup.

code partie comme ceci:c appelle la fonction lua, la valeur de retour est sur la pile.Besoin je l'éclate?

// lua function 
function foo(a, b) 
    return a+b, a-b; 
end 

// c++ 

lua_getglobal(L,"foo"); // push function 
lua_pushnumber(L,1); // push argument 1 
lua_pushnumber(L,2); // push argument 2 

error=lua_pcall(L, 2, 2, 0); 

if (!error) { 
    printf("return:%s\n",lua_tostring(L,-1)); 
    printf("return:%s\n",lua_tostring(L,-2)); 
    // is this needful 
    lua_pop(L,2); 
} 

Répondre

1

Vous devriez toujours essayer de garder la pile dans un état connu, au cas où vous appelez plus de fonctions utilisant le même lua_State. Si vous laissez des résultats assis sur la pile et que vous faites plus d'appels, vous finirez par remplir l'espace de pile disponible.

Alors oui, vous devriez sortir les 2 résultats de la pile après avoir utilisé leurs valeurs.

+1

En cas d'erreur, vous devez également afficher l'objet d'erreur – moteus

+0

. Si vous êtes paresseux, lua_pop (l, lua_gettop (l)) fera disparaître toutes les autres entrées de la pile. –

+0

'lua_settop (L, 0)' semble plus idiomatique pour effacer la pile – Adam