在C中获取Lua表大小

时间:2014-10-30 00:57:28

标签: c lua lua-table lua-api lua-5.1

如何在C中获得Lua表的大小?

static int lstage_build_polling_table (lua_State * L) {
    lua_settop(L, 1);
    luaL_checktype(L, 1, LUA_TTABLE);
    lua_objlen(L,1);
    int len = lua_tointeger(L,1);
    printf("%d\n",len);
    ...
}

我的Lua代码:

local stages = {}
stages[1] = stage1
stages[2] = stage2
stages[3] = stage3

lstage.buildpollingtable(stages)

总是打印0。我做错了什么?

2 个答案:

答案 0 :(得分:6)

lua_objlen返回对象的长度,它不会在堆栈上推送任何内容。

即使它确实在堆栈上推送了某些内容,你的lua_tointeger调用正在使用表的索引,而不是lua_objlen在堆栈上推送的内容(如果它首先推送了任何东西,它没有。)

对于lua 5.1,您需要size_t len = lua_objlen(L,1);

size_t len = lua_rawlen(L,1);代表lua 5.2。

答案 1 :(得分:4)

在您提供的代码中,只需将lua_objlen(L,1)替换为lua_len(L,1)即可。

lua_objlenlua_rawlen返回长度,不要将其留在堆栈中。

lua_len不返回任何内容并将长度留在堆栈上;它也尊重元方法。