Lua学习中的心得体会

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

6.随机数

在使用随机函数math.random(1,10)时会发现数值并不随机,主要原因在于lua中随机函数的使用需要配合math.randomseed(os.time()),其中os.time()可以得到系统的时间,因其格式是转换后一个时刻变化的整数值,所以作为可变因子传入十分合适,只有当可变因子数值发生大的变化时,才能影响到随机函数的数值.同时如果想让随机因子变化的幅度比较大,可以通过string.reverse(tostirng(os.time())来对数值进行翻转.

你可能感兴趣的:(Lua)