首页 > 代码库 > 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学习笔记之基本语法