LuaTable判空
Lua判断表为空t = {}的逻辑
1 | if next(a) == nil then |
next(table[,index])
运行程序来遍历表中的所有域。 第一个参数是要遍历的表,第二个参数是表中的某个键。
next
返回该键的下一个键及其关联的值。 如果用 nil 作为第二个参数调用next
将返回初始键及其关联值。 当以最后一个键去调用,或是以 nil 调用一张空表时,next
返回 nil。 如果不提供第二个参数,将认为它就是 nil。 特别指出,你可以用next(t)
来判断一张表是否是空的。索引在遍历过程中的次序无定义, 即使是数字索引也是这样。 (如果想按数字次序遍历表,可以使用数字形式的 for 。) -Lua 5.3参考手册
(转)在项目的脚本lua中经常有这样的需求,
1、local a = {}
2、对a进行处理
3、对a是否为空表进行判断
关于对a是否为空表的判断,如果直接这样做:
if a == {} then
这样的结果就是a == {}永远返回false,是一个逻辑错误。因为这里比较的是table a和一个匿名table的内存地址。
也有些代码如此做:
if table.maxn(a) == 0 then
这样做也不保险,除非table的key都是数字,而没有hash部分。
难道真的要遍历table发现有东西就return false跳出才能断定它是否为空吗?这样做是可以的,至少目前项目中前人是这么封装的,不过代码太难看.
网上小搜了一下,发现原来官方手册里早已经给了答案,那就是靠lua内置的next函数
即如此用:if next(a) == nil then
next其实就是pairs遍历table时用来取下一个内容的函数.