【问题标题】:Create a table with table keys in Lua with the C API使用 C API 在 Lua 中使用表键创建表
【发布时间】:2011-03-20 08:10:12
【问题描述】:

在 Lua 中,您可以创建一个表,其键本身就是表:

t = {}
t[{1,2}] = 2

我想知道如何使用 C API 做类似的事情。也就是说,我正在编写一个可从 Lua 调用的 C 函数,它将返回一个带有表键的表。我尝试将一个表作为键推送,然后使用 lua_settable,但它似乎什么也没做。

编辑:相关代码:

lua_createtable(L, 0, n);
for(i = 0; i < n; ++i){
    // push the key table
    lua_createtable(L, 2, 0);
    for(j = 0; j < 2; ++j){
        lua_pushinteger(L, j+1);
        lua_pushinteger(L, j);
        lua_settable(L, -3);
    }
    // push the value table
    lua_createtable(L, 4, 0);
    for(j = 0; j < 4; ++j){
        lua_pushinteger(L, j+1);
        lua_pushnumber(L, j);
        lua_settable(L, -3);
    }
    lua_settable(L, -3);
}

编辑:我很笨;我在最后使用lua_objlen(L, -1) 来检查表的大小,由于没有整数键控条目,它返回 0。另外,在处理表格的 Lua 代码中,我使用了ipairs 而不是pairs。愚蠢的错误。

【问题讨论】:

    标签: lua


    【解决方案1】:

    将表作为键并使用 lua_settable 是正确的做法。最有可能的是,您只是忘记同时推入一个值并有效地执行了 t = { {} = nil },这当然没什么。

    【讨论】:

      【解决方案2】:

      我以错误的方式检查表格条目。我已经用解决方案编辑了问题。

      【讨论】:

        猜你喜欢
        • 2016-10-17
        • 2010-12-10
        • 1970-01-01
        • 2011-06-29
        • 1970-01-01
        • 2015-05-31
        • 2021-02-25
        • 1970-01-01
        • 2016-08-04
        相关资源
        最近更新 更多