1.逻辑运算符-短路规则
–需要进行“短路规则”判断的例子
–print(10 and 20) --output: 20
–print(nil and 80) --outpu: nil
–print(false and 66) --output: false
–print(2 or 5) --output: 2
–print(false or 10) --output: 10
–print(“你好” and 10) --output: 10
–print(20 or “hello”) --output: 20
2.关键字pairs与ipair的区别
pairs会遍历table的所有键值对,table就是键值对的数据结构。而ipairs就是固定地从key值1开始,下次key累加1进行遍历,如果key对应的value不存在,就停止遍历。顺便说下,记忆也很简单,带i的就是根据integer key值从1开始遍历的。
请看个例子:
tb = {"oh", [3] = "god", "my", [5] = "hello", [6] = "world"}
for k,v in ipairs(tb) do
print(k, v)
end
输出结果就是:
1 oh
2 my
3 god
因为tb不存在tb[4],所以遍历到此为止了。
for k,v in pairs(tb) do
print(k, v)
end
输出结果:
1 oh
2 my
3 god
6 world
5 hello
我们都能猜到,将输出所有的内容。然而你发现输出的顺序跟你tb中的顺序不同。
如果我们要按顺序输出怎么办?
for i = 1, #tb do
if tb[i] then
print(tb[i])
else
end
当然,仅仅是个数组的话,ipairs也没问题。
3.表长度的输出
对表进行遍历输出时,没有键值对的表可以直接通过#或者table.getn获取表的长度,有键值对的表需要通过迭代器函数pairs或者ipairs来获取表的长度.
4.表最大值的问题
表tab={10,11,55,33,100}采用table.maxn函数求最大值时,返回的值是5,此官方函数有BUG,实际输出的是表的长度,而不是表的内容中的最大值.
5.可变参数
对可变参数进行遍历时,用ipairs碰到nil时会停止遍历,用pairs碰到nil时会跳过继续遍历,如果想遍历到nil则需要用select关键字,select(’#’,…)可以获取可变参数的长度,需要注意的是select关键字同arg冲突,同时select(i,…)的含义是从位置1开始遍历所有的可变参数,所以如果是打印输出所有的可变参数,可以不用使用for循环,如果需要对其中的值进行逐个操作,则需要
local num
for i=1,select('#',...) do
num=select(i,...)
print(num)
end