2010-10-19 20 views
4

C++ J'ai une fonction Lua qui retourne la table (contient un ensemble de cordes) la course de fonction fine en utilisant ce code:Comment lire la valeur de retour de table Lua de

lua_pushstring (lua, "funcname"); 
lua_gettable (lua, LUA_GLOBALSINDEX); 
lua_pushstring(lua, "someparam"); 
lua_pcall (lua, 1, 1, 0); 

la fonction retourne une table. Comment lire le contenu de mon code C++?

Répondre

6

Si vous demandez comment traverser la table résultante, vous avez besoin lua_next (le lien contient également un exemple). Comme egarcia a déclaré, si lua_pcall renvoie 0, la table la fonction retournée peut être trouvée sur le dessus de la pile.

+1

'lua_next()' va énumérer tout le contenu de la table, cependant, il peut être plus facile d'accéder directement à la table si l'index est connu. 'lua_gettable()', 'lua_getfield()', 'lua_rawget()', ou 'lua_rawgeti()' peuvent tous accéder au contenu d'une table si un index est connu. – gwell

+0

@gwell: vrai, mais étant donné que OP a utilisé 'lua_gettable' dans son échantillon, j'ai supposé qu'il connaissait déjà certains de ceux-ci au moins. – sbk

1

Si la fonction ne jette aucune erreur, alors lua_pcall sera:

  1. Retirez les paramètres de la pile
  2. Poussez le résultat à la pile

Cela signifie que, si votre fonction ne jette aucune erreur, vous pouvez utiliser lua_setfield tout de suite - lua_pcall fonctionnera comme lua_call:

lua_pushstring (lua, "funcname"); 
lua_gettable (lua, LUA_GLOBALSINDEX); 
lua_pushstring(lua, "someparam"); 
lua_pcall (lua, 1, 1, 0); 
lua_setfield(L, LUA_GLOBALSINDEX, "a");  /* set global 'a' */ 

serait l'équivalent de:

a = funcname(someparam) 
+1

Affecter la table à un global n'est pas exactement la même chose que lire son contenu. – gwell

+0

vous avez raison. La réponse de sbk est meilleure que la mienne. – kikito