2017-09-22 5 views
1

Récemment, j'ai exploré le luac 5.1 api et je me demandais s'il était possible de boucler toutes les valeurs globales de l'API 5.1, je sais qu'il est possible de le faire en 5.2 (référencé here) en tant que lua_pushglobaltable (lua_State *) existe. Je sais qu'il y a LUA_GLOBALSINDEX mais je ne suis pas sûr de savoir comment l'utiliser à cette fin. Toute aide serait grandement appréciée!Lua C 5.1 - Itérer à travers toutes les valeurs globales

Merci :)

Répondre

3

Vous pouvez utiliser le code dans la réponse que vous avez mentionné. Faites simplement ceci:

#define lua_pushglobaltable(L) lua_pushvalue(L,LUA_GLOBALSINDEX) 

Voici un programme complet qui répertorie toutes les variables globales. Si vous supprimez le définir, cela fonctionne dans Lua 5.2 et 5.3.

#include <stdio.h> 
#include "lua.h" 
#include "lauxlib.h" 
#include "lualib.h" 

#define lua_pushglobaltable(L) lua_pushvalue(L,LUA_GLOBALSINDEX) 

int main(void) 
{ 
    lua_State *L=luaL_newstate(); 
    luaL_openlibs(L); 
    lua_pushglobaltable(L); 
    lua_pushnil(L); 
    while (lua_next(L,-2) != 0) { 
     puts(lua_tostring(L,-2)); 
     lua_pop(L,1); 
    } 
    lua_pop(L,1); 
    lua_close(L); 
    return 0; 
} 
+0

Brilliant! Cela fait exactement ce que j'avais besoin de faire, merci beaucoup :) – Batoda