在C中获取Lua表的大小

Get Lua table size in C

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

1
2
3
4
5
6
7
8
9
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\
"
,len);
    ...
}

我的Lua代码:

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

lstage.buildpollingtable(stages)

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


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。


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

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

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