基本语法:lua支持赋值语句,控制结构语句,函数调用,同时也支持多变量赋值,局部变量声明。
Lua可以对多个变量同时赋值,例如:
a,b = 10,2 * x <--> a = 10 ,b = 2 * x
遇到赋值语句lua会先计算右边所有的值,然后再执行赋值操作,所以,我们可以这样进行交换变量的值:
x,y = y ,x
a[i],a[j] = a[j],a[i]
当变量个数和值的个数不一致时,lua会一直以变量个数为基础采取以下策略:
变量个数>值的个数 按变量个数不足nil
变量个数<值的个数 多余的值会被忽略
a,b,c = 0,1
print(a,b,c) -- 0 1 nil
a,b = a + 1,b + 1,b +2
print(a,b) -- 1 2
a,b,c = 0
print(a,b,c) -- 0 nil nil
注意:如果要对多个变量赋值不息依次对每个变量赋值。
多值赋值经常用来交换变量,或将函数调用返回给变量。
a,b = f() -- f()返回两个值,一个赋给a,一个赋给b
局部变量与代码块:
使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。
代码块:指一个控制结构内,一个函数体,或者一个chunk(变量声明的那个文件或者文本串)
x = 10
local i = 1
while i < x do
local x = i * 2 -- 2,4,6.. x是局部变量
print(x)
i = i + 1
end
print("-----------------------")
if i > 20 then
local x --x是局部变量
x = 20
print(x + 2)
else
print(x)
end
print(x)--x是定义的全局变量
使用局部变量的好处:
1.避免命名冲突
2.访问局部变量的速度比全局变量更快
我们给block划定一个明确的界限:do..end内的部分。当你想更好的控制局部变量的作用范围的时候这是很有用的。
a = 1
b = 200
c = 3
do
local a2 = 2 * a
local d = math.sqrt(b^2 - 4 * a * c)
x1 = (-b + d) / a2
x2 = (-b - d) / a2
end
print(x1,x2)
控制结构语句:
Lua认为false和nil为假,其他值为真。
If有三种形式:
if conditions then
then part
end ;
if conditions then
then part
else
else part
end;
if conditions then
then part
elseif conditions then
elseif part
.......-->多个elseif
else
else part
end;
While 语句
while condition do
statements;
end;
Repeat-until语句
repeat
statemnets ;
until conditions;
For循环:
第一种
for var = exp1,exp2,exp3 do
loop-part
End
For 将用exp3作为step从exp1(初始值)到exp2(终止值),执行loop-part。其中exp3可以省略,默认为1。
注意:三个表达式只会被执行一次,而且是在循环开始前。
for i = 1,50 do
print(i)
end
for i = 10 ,1,-2 do
print(i)
end
控制变量var是局部变量自动被声明,并且只在循环内有效。
for i = 1,10 do
print(i)
end
max = i
print(max)
local found = nil
for i = 1 ,10 do
if(found == nil) then
found = i
else
if(i > found) then
found = i
end
end
end
print(found)
循环过程中不要改变控制变量的值,那样做的结果是不可预知的。如果要退出循环,使用break。
第二中,泛型for循环
for i,v in ipairs(a) do print(v) end
泛型for循环和数值for循环有两点相同:
1.控制变量是局部变量
2.不要修改控制变量的值
days = {"sunday","monday","tuesday","wednesday","thursday","friday","saturday"}
revDays = {}
for i ,v in ipairs(days) do
revDays[v] = i
print(i)
print(revDays[v])
end
for i = 1,7 do
x = days[i]
print(x)
print(revDays[x])
end
print(revDays["wednesday"])