我想在关卡编辑器中读取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 ++中访问密钥的名称和相应的值。可以这样做吗?如果是这样我该怎么办呢?
答案 0 :(得分:4)
这由lua_next
function涵盖,它迭代表的元素:
// 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,那么你就完成了(当弹出键时,下一个键没有按下)。
显然,向正在迭代的表中添加或删除元素可能会导致问题。