Lua:Statement
Lua支持:赋值、控制结构、函数调用等,另外Lua也支持一些所谓“奇葩”的语句段,那就是多重赋值还有局部声明。
4.1 Assignment
基本的赋值同其他语言类似:
a = "hello" .. "world"
所谓“奇葩”的多重赋值:
a,b = "hello","world" eg. a,b = "hello","world" print(a) --hello print(b) --world
多重赋值的时候,多余的值会被舍弃,而不足补nil
eg. a,b,c = 1,2,3,4 --4 会被舍弃 a,b,c = 1,2 -- c 会被赋值nil
作者也指出,多重赋值的速度亚于单一的赋值,所以一般在函数返回多个值的时候才会使用多重赋值。
Local变量
Local变量有其范围,因此可以使用local限定变量的有效范围,在某些编译环境下,会将每一行视为一个chunk,因此local的限定作用将会失效。此时的解决方案是使用关键字do-end来实现chunk:
eg.
do <chunk> end
使用local变量的好处是拥有更快的速度,并且local变量出了chunk便会被系统收回内存使用。
控制结构
1、if then else结构
eg.
if <condition> then <body> else <body> end
eg.注意此处不需要多余的end
if <condition> then <body> elseif <condition> then <body> elseif <condition> then <body> else <body> end
因为lua中没有switch语句,所以上述语句的使用一定程度上能达到switch的效果。
2、while结构
当while条件为真的时候循环
while <condition> do <body> end
3、repeat-until 结构
循环,直到until的条件为真
repeat <body> until <condition>
4、for
Numeric for 和Generic for
Numeric for
eg.
for var = exp1,exp2,exp3 do <body> end
这个循环用var的值(起始值为exp1,结束值exp2,每一步变动值exp3)来执行循环体。要注意的是,exp1,2,3这三个值只会执行计算一次,并且var的语意范围只在循环体内部有效。
提前结束循环可以使用break关键词。
Generic for
使用到了迭代器:迭代遍历文件每一行(io.lines);迭代遍历table(pairs);迭代遍历一组序列(ipairs);遍历字符串的每一个字符(string.gmatch)
eg.
Break、return、goto
一般用break和return来跳出某个语句快,而goto则用来跳转到某个指定的函数。Lua中的goto使用恰当的话能发挥非常大的作用,这个需要注意一下。