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
... -- 多个elseif
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
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
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
-- print all values of array 'a'
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
for i,v in ipairs(tdays) do
print(v)
end

1
2
3
4
5
6
7
8
 -- 求t表中数的和

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