首页 > 代码库 > lua学习笔记之基本语法
lua学习笔记之基本语法
Lua学习笔记之基本语法
1、 赋值语句
赋值是改变一个变量的值和改变表域的最基本的方法。
a = “hello”..”world”
t.n = t.n+1
lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会一次赋给左边的变量。
a,b = 10,2*x <-->a = 10;b = 2*x
遇到赋值语句lua会先计算右边所有的值然后再执行赋值操纵,所以我们可以这样进行交换变量的值:
x,y = y,x --swap ’x’for ‘y’
a[i],a[j] =a[j],a[i] --swap ‘a[i]’ for ‘a[j]’
当变量个数和值个数不一致时,lua会一直以变量个数为基础采用以下策略:
a.变量个数>值个数 按变量个数补足nil
b.变量个数<值个数 多余的值会被忽略
例如:
a,b,c = 0,1
print(a,b,c) -->0 1 nil
a,b=a+1,b+1,b+2 -->value of b+2 is ignored
print(a,b) -->1 2
a,b,c = 0
print(a,b,c) -->0 nil nil
如果要对多个变量赋值必须一次对每一个变量赋值。
a,b,c = 0,0,0
print(a,b,c) -->0 0 0
多值赋值常用来交换变量,或者函数调用返回给变量:
a,b = f()
f()返回两个值,第一个赋给a,第二个赋给b
2、 局部变量与代码块(block)
使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。代码块:指一个控制结构体内,一个函数体,或者一个chunk(变量被声明的那个文件或者文本串)
x = 10
local i = 1
while i<=x do
local x = i*2
print(x)
i = i+1
end
if i>20 then
local x
x = 20
print(x+20)
else
print(x)
end
print(x)
使用局部变量的好处:
① 免命名冲突
② 访问局部变量的速度比全局变量更快
3、 控制结构
控制结构的表达式结果可以是任何值,lua认为false和nil为假,其他都是真。
if语句,有三种形式:
if conditions then
then – part
end
if conditions then
then-part
else
else – part
end
if conditions then
then – part
else if conditionsthen
else if –part
.. -->多个else if
else
else – part
end
while语句:
while conditions do
statements
end
repaeat_until语句:
repeat
statements
untitl conditions
for 语句有两个大类:
第一、 数值for循环:
for var = exp1,exp2,exp3 do
loop-part
end
for将用exp3作为step从exp1(初始值)到exp2(终止值),执行loop-part。其中exp3可以省略,默认step = 1
三个表达式只会被计算一次,并且是在循环开始前。
for i = 1,f(x) do
print(i)
end
for i = 10,1,-1 do
print(i)
end
上面的第一个例子f(x)只会在循环前被调用一次。
控制变量var 是局部变量自动被声明,并且只在循环内有效。
for i=1,10 do
prin(i)
end
如果需要保留控制变量的值,需要在循环中将其保存
Local found = nil
for i =1,a.n do
if a[i] == value then
found = i
break
end
end
print(found)
循环过程中不要改变控制变量的值,那样做会是结果不可预知,如果要退出循环使用break语句。
范型for循环:
for i,v in ipairs(a) do print(v) end
范型for遍历迭代子函数返回的每一个值。
for k in paris(t) do print(k) end
范型for和数值for有两点相同:
① 制变量是局部变量
② 不要修改控制变量的值
4、 break和return语句
break语句是用来退出当前循环(for,repeat,while)。在循环外面不可以使用。
return用来从函数返回结果,当一个函数自然结果尾会有一个默认的return。
Lua语法要求break和return只能出现在block的结尾一局(也就是说:作为chunk的最后一局,或者在end之前,或者else之前,或者until前)例如:
local i =1
while a[i] = do
if a[i] == v thenbreak end
i = i+1
end
有时候为了调试或者其他目的需要在block的中间使用return或者break,可以显示的使用do..end来实现:
function foo ()
return
do return end
…
end
lua学习笔记之基本语法