从 C 创建嵌套表

Create nested tables from C

我正在尝试从 C:

创建这个数据结构
local table = {
    id = 12,
    items = {
        {
            id = 1,
            name = "foo",
        },{
            id = 2,
            name = "bar",
        }
    }
}

但是我无法使匿名表正常工作。 (这是我想要的数组,但数组和表在 luaafaik 中是相同的)。

lua_newtable(L);
lua_pushinteger(L, 1);
lua_setfield(L, -2, "id");
lua_newtable(L);
lua_newtable(L);
lua_pushinteger(L, 1);
lua_setfield(L, -2, "id");
lua_pushstring(L, "foo");
lua_setfield(L, -2, "name");
lua_setfield(L, -2, "1");

lua_newtable(L);
lua_pushinteger(L, 1);
lua_setfield(L, -2, "id");
lua_pushstring(L, "bar");
lua_setfield(L, -2, "name");
lua_setfield(L, -2, "2");
lua_setfield(L, -2, "items");

这给出了

{
  id = 1,
  items = {
    ["1"] = {
      id = 1,
      name = "foo"
    },
    ["2"] = {
      id = 1,
      name = "bar"
    }
  }
}

我正在使用 lua 5.1,所以我无法访问 lua_seti

如前所述,table和数组在Lua中是相同的数据结构。为了“设置数组项”,最重要的是使用数字作为键。不能使用 lua_setfield 设置数组项,因为它使用字符串键。从输出中我们可以看到该函数完全按照宣传的方式工作——项目被插入到字符串键“1”和“2”下的 table 中。

请使用lua_settable.

void lua_settable (lua_State *L, int index); Does the equivalent to t[k] = v, where t is the value at the given valid index, v is the value at the top of the stack, and k is the value just below the top.

使用 lua_pushnumber 将所需的索引压入堆栈,以用作 lua_settable 的键。