c遍历lua中table的方法

遍历一个table,肯定是不知道table的每个key的,所以lua_getfield肯定是不可行的。

要遍历table,最主要的是lua_next函数,该函数主要接受一个int参数,代表当前table所在的索引,索引之上应该需要一个key,每次lua_next都会从当前的key遍历下一个key,于是我们想要得到第一个key,则只需要压入一个nil就行了。

当lua_next返回0的时候,代表遍历完毕,它会把table上的key进行弹出操作;当当前有key的时候,返回非0值,同时将key和value压入栈,栈顶就是value,-2则是key。我们可以取到当前的value,然后将key留在栈中继续下一次的遍历。

上代码:

{
    LuaStackGuard stackChecker(L);

    lua_getglobal(L, _pszName);
    if (!lua_istable(L, -1))
    {
        // LUA_TNIL
        lua_pop(L, 1);
        return false;
    }

    int tableIndex = lua_gettop(L);
    // push the first key
    lua_pushnil(L);
    while (0 != lua_next(L, tableIndex))
    {
        // stack : table key value

        // Done, pop all fields
        lua_pop(L, 1); // stack : table key
    }
    // last key will pop the key, stack : table
    lua_pop(L, 1);

    return true;
}
共 0 条回复
暂时没有人回复哦,赶紧抢沙发
发表新回复

作者

sryan
today is a good day