赋值
基础赋值
a = 10
tab.name = "name"
多重赋值
a,b = 10,"abc"
a,b = b,a --交换两个变量 多重赋值时,注意左右格数不匹配的情况
a,b,c = 0,1 print(a,b,c)
输出
0,1,nil
a,b,c = 0 print(a,b,c)
输出
nil.nil,0
局部变量与块(block)
使用local创建局部变量。
local i =1 --局部变量
m = 20 --全局变量
局部变量的作用域仅限于声明它们的那个块。一个块是一个控制结构的执行体、或者是一个函数的执行体再或者是一个程序块。
x = 10 --全局变量
local i =1
while i<= x do
local x = i*2 --x为局部变量
print(x) --输出2、 4、 6 、8..
i = i+1
end
if i > 20 then
local x --局部变量
x = 20
print(x+2) --输出22
else
print(x) --全局变量 输出10
end
一个局部变量通常会随着其作用域的结束而消失,GC便可释放其值。访问局部变量速度比全局变量速度快。
控制结构
if then else 流程控制
local a = 20
if a < 10 then
print("the number less than 10")
elseif a < 15 then
print("the number between 10 and 15")
elseif a < 20 then
print("the number between 15 and 20")
else
print("the number more than 20")
end
由于lua不支持switch语句,所以这一连串的if -elseif 代码是很常见的。
while
与其他语言中的while不同,lua先测试while条件。如果条件为false,那么循环接结束。
local i=1
while i < 20 do
print("name"..i)
i = i+1 -- lua中没有自增++ 自减--运算符
end
repeat
一条repeat -until语句重复执行知道条件为真结束
local i = 1
repeat
i = i+1
print("name"..i)
until i > 20
for
数字型for
for var = exp1,exp2,exp3 do
<执行体>
end
var 从exp1变化到exp2,每次变化以exp3作为步长,并执行一次执行体
其中exp3是可选的,默认为1
for循环打印前十的偶数
for i = 2,10,2 do
print(i)
end
泛型for
通过迭代器函数来遍历所有值
local tab = {"one","two","three"}
for i,v in ipairs(tab) do
print(i,v)
end
输出
1 one
2 two
3 three
注意:
pairs遍历表中全部key,value
ipairs从下标为1开始遍历,然后下标累加1,如果某个下标元素不存在就终止遍历。这就导致如 果下标不连续或者不是从1开始的表就会中断或者遍历不到元素。即ipairs必须按照索引递增遍历。
break与return
break和return语句用于跳出当前块。并且break和return只能是一个块的最后一条语句。