6

如何在 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。我究竟做错了什么?

4

2 回答 2

7

lua_objlen返回对象的长度,它不会将任何东西压入堆栈。

即使它确实在堆栈上推送了一些东西,你的lua_tointeger调用也使用了表的索引,而不是任何lua_objlen会推送到堆栈上的东西(如果它首先推送了任何东西,它不会)。

你想要size_t len = lua_objlen(L,1);lua 5.1。

或者size_t len = lua_rawlen(L,1);对于 lua 5.2。

于 2014-10-30T00:59:52.823 回答
4

In the code you gave, just replace lua_objlen(L,1) with lua_len(L,1).

lua_objlen and lua_rawlen return the length and do not leave it on the stack.

lua_len returns nothing and leaves the length on the stack; it also respect metamethods.

于 2014-10-30T09:15:22.800 回答