【问题标题】:Get Lua table size in C在 C 中获取 Lua 表大小
【发布时间】:2014-12-25 22:06:01
【问题描述】:

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

【问题讨论】:

  • “表的大小”是一个奇怪的术语。如果表具有手册中定义的序列,则您将获得表中序列的长度(可能为 0),否则不确定。

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


【解决方案1】:

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

即使它确实将某些东西压入堆栈,您的lua_tointeger 调用也使用了表的索引,而不是lua_objlen 会压入堆栈的任何东西(如果它首先压入任何东西,它不会' t)。

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

size_t len = lua_rawlen(L,1); 用于 lua 5.2。

【讨论】:

【解决方案2】:

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

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

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

【讨论】:

猜你喜欢
  • 2015-05-21
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 2012-09-18
  • 2019-06-09
  • 1970-01-01
  • 2013-10-03
  • 2013-10-05
相关资源
最近更新 更多