在C中获取Lua表的大小

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

点赞
用户258523
用户258523

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

即使它在栈上推送了一些内容,你的 lua_tointeger 调用也是使用表的索引而不是 lua_objlen 在栈上推送的任何内容(如果它首先在栈上推送了任何内容,但它没有)。

对于 Lua 5.1,你需要使用 size_t len = lua_objlen(L,1);

或者对于 Lua 5.2,你需要使用 size_t len = lua_rawlen(L,1);

2014-10-30 00:59:52
用户107090
用户107090

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

lua_objlenlua_rawlen 返回长度并不将其保留在堆栈上。

lua_len 不返回任何东西,它会将长度保留在堆栈上;它还会考虑元方法。

2014-10-30 09:15:22