欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Lua学习中的心得体会

程序员文章站 2022-03-02 14:57:37
...

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())来对数值进行翻转.

加粗样式