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,x1
2
3
4
5
6
7
8
9local 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 | -- if的三种写法 |
1 | -- 第一种 |
while使用:
1 | while condition do |
1 | local i,s = 1,0 |
repeat使用(等同于do-while):
1 | repeat |
1 | local i,a = 1,0 |
内部语句块的结束点不是在until这个关键字处,它还包括了其后的条件表达式
for语句
for语句有两大类,数值for循环,范围for循环1
2
3
4
5
6
7
8
9-- 数值for
for var = exp1,exp2,exp3 do
loop = part
end
-- 范型for
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
16local a = 0
function foo()
return 2
end
for k = 1,10,foo() do
a = a + 1
end
print(a)
=====结果=====
5
范型for循环
1 | -- print all values of array 'a' |
范型for遍历迭代子函数返回的每一个值。范型for和数值for有两点相同
控制变量是局部变量
不要修改控制变量的值1
2
3
4
5local tdays = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
-- 范型for
for i,v in ipairs(tdays) do
print(v)
end
1 | -- 求t表中数的和 |
break和return语句
break语句用来退出当前循环(for,repeat,while)。在循环外部不可以使用
return语句,返回某个值,均只能放在某个语句块最后一句,end、else、until之前;若中途想用可用do..end来实现,例如 do return end1
2
3
4
5
6
7local t = {1,2,"","",5,6,7}
for k,v in pairs(t) do
if k == 2 then
print(k,v)
return
end
end