先介绍一下这个函数,引用自http://www.runoob.com/manual/lua53doc/manual.html lua官方文档。
int lua_next (lua_State *L, int index);
从栈顶弹出一个键, 然后把索引指定的表中的一个键值对压栈 (弹出的键之后的 “下一” 对)。 如果表中以无更多元素, 那么 lua_next
将返回 0 (什么也不压栈)。
典型的遍历方法是这样的:
/* 表放在索引 't' 处 */ lua_pushnil(L); /* 第一个键 */ while (lua_next(L, t) != 0) { /* 使用 '键' (在索引 -2 处) 和 '值' (在索引 -1 处)*/ printf("%s - %s\n", lua_typename(L, lua_type(L, -2)), lua_typename(L, lua_type(L, -1))); /* 移除 '值' ;保留 '键' 做下一次迭代 */ lua_pop(L, 1); }
在遍历一张表的时候, 不要直接对键调用 lua_tolstring
, 除非你知道这个键一定是一个字符串。 调用 lua_tolstring
有可能改变给定索引位置的值; 这会对下一次调用 lua_next
造成影响。
关于迭代过程中修改被迭代的表的注意事项参见 next
函数。
简单来说,就是压入一个空, lua_next弹出key和value。再弹出栈顶元素,lua_next弹出key和value。直到lua_next为0。