Lua C 5.1 - 遍历所有全局变量

最近我一直在探索luac 5.1 api,并且我想知道是否有可能在5.1 api中循环遍历每个全局值,我知道在5.2中可以这样做(引用这里),因为lua_pushglobaltable(lua_State*)存在。我知道有LUA_GLOBALSINDEX,但是我不确定如何将其用于此目的。任何帮助都将不胜感激!

谢谢 :)

点赞
用户107090
用户107090

你可以使用你提到的答案中的代码。只需这样做:

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

这是一个列出所有全局变量的完整程序。如果删除了定义,它可以在Lua 5.2和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;
}
2017-09-23 00:06:49