从 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
的键。
我正在尝试从 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
的键。