我想在关卡编辑器中读取 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++ 中访问键的名称和相应的值。这可以做到吗?如果是这样我该怎么办?
这由lua_next功能 http://www.lua.org/manual/5.1/manual.html#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,那么你就完成了(当弹出键时,下一个键没有被压入)。
显然,向正在迭代的表添加或删除元素可能会导致问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)