lua学习笔记04

来源:互联网 发布:信捷plc流程梯图编程 编辑:程序博客网 时间:2024/05/01 06:17


基本语法: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,1print(a,b,c) -- 0   1 nila,b = a + 1,b + 1,b +2print(a,b)   -- 1 2a,b,c = 0print(a,b,c) -- 0 nil nil


注意:如果要对多个变量赋值不息依次对每个变量赋值。

多值赋值经常用来交换变量,或将函数调用返回给变量。

a,b = f()  -- f()返回两个值,一个赋给a,一个赋给b

 

局部变量与代码块:

使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。

代码块:指一个控制结构内,一个函数体,或者一个chunk(变量声明的那个文件或者文本串)

x = 10local i = 1while i < x dolocal x = i * 2 -- 2,4,6..  x是局部变量print(x)i = i + 1endprint("-----------------------")if i > 20 thenlocal x  --x是局部变量x = 20print(x + 2)elseprint(x)endprint(x)--x是定义的全局变量


 

使用局部变量的好处:

1.避免命名冲突

2.访问局部变量的速度比全局变量更快

 

我们给block划定一个明确的界限:do..end内的部分。当你想更好的控制局部变量的作用范围的时候这是很有用的。

a = 1b = 200c = 3dolocal a2 = 2 * alocal d = math.sqrt(b^2 - 4 * a * c)x1 = (-b + d) / a2x2 = (-b - d) / a2endprint(x1,x2)


控制结构语句:

Lua认为falsenil为假,其他值为真。

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作为stepexp1(初始值)到exp2(终止值),执行loop-part。其中exp3可以省略,默认为1

注意:三个表达式只会被执行一次,而且是在循环开始前。

for i = 1,50 doprint(i)endfor i = 10 ,1,-2 doprint(i)end


 

控制变量var是局部变量自动被声明,并且只在循环内有效。

for i = 1,10 doprint(i)endmax = iprint(max)local found  = nilfor i = 1 ,10 doif(found == nil) thenfound = ielseif(i > found) thenfound = iendendendprint(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) dorevDays[v] = iprint(i)print(revDays[v])endfor i = 1,7 dox = days[i]print(x)print(revDays[x])endprint(revDays["wednesday"])


0 0
原创粉丝点击