Lua 访问表的键和值

我想在一个关卡编辑器中读取 Lua 文件,以便以可视化格式显示其数据,供用户进行编辑。

如果我有一个如下所示的 Lua 表:

properties = {
  Speed = 10,
  TurnSpeed = 5
}

显然,“Speed”是键,而“10”是值。如果我知道键,我可以像这样访问值(假设表已在堆栈上):

lua_pushstring(L, "Speed");
lua_gettable(L, idx);
int Speed = lua_tointeger(L, -1);
lua_pop(L, 1);

我想要做的是访问键的名称和对应的值,在 C++ 中能做到吗?如果可以,我该如何进行?

点赞
用户734069
用户734069

这可以通过lua_next函数实现,该函数遍历表格元素:

// table is in the stack at index 't'
lua_pushnil(L);  // first key
while (lua_next(L, t) != 0)
{
  //使用 'key' (在索引-2) 和 'value' (在索引-1)
  printf("%s - %s\n", luaL_typename(L, -2), luaL_typename(L, -1));
  // 删除 'value';保留 'key' 用于下次迭代
  lua_pop(L, 1);
}

lua_next函数依靠表格中的键来迭代,所以您需要在迭代时将其保留在堆栈上。每次调用将跳转到下一个键值对。一旦返回0,你就完成了(尽管键已弹出,但下一个值没有被推送)。

显然,在迭代过程中添加或删除元素会导致问题。

2012-09-15 21:41:57