2

我想在关卡编辑器中读取 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++ 中访问密钥的名称和相应的值。这可以做到吗?如果是这样,我该怎么做?

4

1 回答 1

4

这由lua_next函数覆盖,它遍历表的元素:

// table is in the stack at index 't'
lua_pushnil(L);  // first key
while (lua_next(L, t) != 0)
{
  // uses 'key' (at index -2) and 'value' (at index -1)
  printf("%s - %s\n", luaL_typename(L, -2), luaL_typename(L, -1));
  // removes 'value'; keeps 'key' for next iteration
  lua_pop(L, 1);
}

lua_next表的键,嗯,键,所以你需要在迭代时将它保留在堆栈中。每次调用都会跳转到下一个键/值对。一旦它返回 0,那么你就完成了(当键被弹出时,下一个键没有被按下)。

Obviously adding or removing elements to a table you're iterating over can cause issues.

于 2012-09-15T21:41:57.253 回答