chunk语句组
chunk是一系列语句,lua执行的每一块语句,比如一个文件或者交互模式下的每一行都是一个chunk
语句块
显式的语句块对于控制变量的作用范围很有用,有时候,显式的语句块被用来在另一个语句块中插入retuen或是break
赋值语句
lua允许多重赋值,因此,赋值的语法定义是等号左边放一系列变量,而等号右边放一系列的表达式,两边的元素都用逗号间开
1
| local a,b,c,d,e = 1,2,3,4,5,6
|
当变量个数和值的个数不一致时:
if 变量个数 > 值的个数
按变量个数补足nil
if 变量个数 < 值的个数
多余的值会被忽略
备注:lua会先计算右边所有的值后才赋值,所以交换可以这么写,x,y = y,x
1 2 3 4 5 6 7 8 9
| local a,b,c = 1 print(a,b,c) local a,b,c,d,e = 1,2,3,4,5,6 print(a,b,c,d,e)
=====结果===== 1 nil nil 1 2 3 4 5
|
注意:如果要对多个变量赋值必须依次对每个变量赋值
控制结构语句
if while 以及repeat这些控制结构符合通常的意义,而且也有类似的语法
if使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| if conditions then then - part end
if conditions then then - part else then - part end
if conditions then then - part elseif conditions then elseif - part ... else else - part end
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| if 21 > 2 then print("what?") end
if 1 > 2 then else print "what?" end
if 1 > 2 then elseif 1>1 then else print "what?" end
=====结果===== what? what? what?
|
while使用:
1 2 3
| while condition do statements end
|
1 2 3 4 5 6 7 8 9 10
| local i,s = 1,0 while 1<10 do a = a + 10 i = i + 1 end print(a)
=====结果===== 90
|
repeat使用(等同于do-while):
1 2 3
| repeat statements until conditions
|
1 2 3 4 5 6 7 8 9 10
| local i,a = 1,0 repeat a = a + 10 i = i + 1 until i >= 10 print(a)
=====结果===== 90
|
内部语句块的结束点不是在until这个关键字处,它还包括了其后的条件表达式
for语句
for语句有两大类,数值for循环,范围for循环
1 2 3 4 5 6 7 8 9
| for var = exp1,exp2,exp3 do loop = part end
for i,v ipairs(a) do print(i,v) end
|
数值for循环
var自动会被申明,并且只在循环内有效果,循环过程中不要改过它的值
exp3可以省略,默认是1,三个表达式只会在循环前触发一次,可以使函数返回值c
循环过程中不要改变控制变量的值,那样做的结果是不可预知的,如果要退出循环,使用break语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| local a = 0 function () return 2 end
for k = 1,10,foo() do a = a + 1 end
print(a)
=====结果===== 5
|
范型for循环
1 2 3 4
| for i,v in ipairs(a) do print(v) end
|
范型for遍历迭代子函数返回的每一个值。范型for和数值for有两点相同
控制变量是局部变量
不要修改控制变量的值
1 2 3 4 5
| local tdays = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
for i,v in ipairs(tdays) do print(v) end
|
1 2 3 4 5 6 7 8
|
local t = {1,2,3,10,20} local sum = 0 for i,v in ipairs(t) do sum = sum + v end print(sum)
|
break和return语句
break语句用来退出当前循环(for,repeat,while)。在循环外部不可以使用
return语句,返回某个值,均只能放在某个语句块最后一句,end、else、until之前;若中途想用可用do..end来实现,例如 do return end
1 2 3 4 5 6 7
| local t = {1,2,"","",5,6,7} for k,v in pairs(t) do if k == 2 then print(k,v) return end end
|