Lua语句段 · 花生肉泥

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  

—|—

糖果

糖果
LUA教程

如果不小心安装错 SQL Server 为 Evaluation 的版本,要小心当超过 180 天之后,系统就会无法正常使用了 这几天遇到一个蛮特别的案例,原本收到的问题是 “维护计划” 忽然无法使用,即便是里面没有任何的Task,都无法顺利地执行。但从对方所提供的错误消...… Continue reading

PLUM NIZ静电容键盘怎么样?

Published on September 25, 2020

程序员如何选择合适的机械键盘

Published on September 18, 2020