控制结构
IF结构
function nestIF()
booleanCondition=1;
if booleanCondition==1 then
print("条件为True")
else
print("条件为false")
end
end
IF~ElseIF嵌套
---nest Ifelse
age=tonumber(io.read())
if age>60 then
print("老年人")
elseif age>50 then
print("中年人")
elseif age>30 then
print("青年人")
elseif age>20 then
print("小伙子")
elseif age>10 then
print("青春期")
elseif age>0 then
print("幼童")
end
与C#类型 lua中也有ElseIF结构 用来代替IF{}Else{ if{ }}写法。
使用elseif还不用在每次逻辑分支后写END。
While结构
while指直到condition为false的时候退出循环,在while、repeat、for这种循环体中可以用break跳出循环。
function whileStruct()
num=tonumber(io.read())
condition=(num>5)
while condition do
print("请输入数字")
num=tonumber(io.read())---缺少 TryParse
condition=(num>5)
end
print("退出循环Break")
end
此片段让用户每次出入一个数,直到输入的数小于5退出循环 结束程序。
结构:
while condition do
end
repeat循环结构
repeat指直到condition为true的时候退出循环。
在下面的示例中condition=》num==0
function repeatStruct()
local num=10
print(num)
repeat
num=num-1
print(num)
until num==0
print("直到num等于0 条件为true时候退出循环")
end
for循环结构
lua 中for也是有三个参数列表 跟c#一样。在lua中 i1,i2,step i1至i2以step作为步长 每次循环完增加step
function forStruct()
---lua 中for也是有三个参数列表 跟c#一样。在lua中 i1,i2,step i1-i2以step作为步长 每次循环完增加step
---若是step不指定 则默认步长为1
fornum=0
for i = 1, 10,2 do
print(i)
fornum=fornum+1
end
print(("在i=1,到条件值10,每次循环以步长为2进行递增,共循环".. fornum))
---无限循环无终止
i=2
for i= 1, math.huge do
if i==10 then
print(i)
break
end
end
print(i)---在for的参数列表中声明i 默认i是for局部变量
---如果在for外声明了i,然后在for的参数列表中对i再进行初始化使用,当i结束的时候 会把原先外部的i的初始值重新赋值回去,好tm奇怪。
---想了一想,其实错了,记得局部变量跟全局变量的优先级吗,他们不是指向一个内存地址,所以所作的操作是不同的对象。这就是真正原因,、
---在for中的i隐式的定义了local,外部的i是全局变量,局部总是比全局优先,当局部域销毁时,局部变量随它被回收。
end
forStruct()
Step=2的输出结果
1
3
5
7
9
在i=1,到条件值10,每次循环以步长为2进行递增,共循环5
10
2
在for的参数列表中声明i 默认i是for局部变量
—如果在for外声明了i,然后在for的参数列表中对i再进行初始化使用,当i结束的时候 会把原先外部的i的初始值重新赋值回去,好tm奇怪。
—想了一想,其实错了,记得局部变量跟全局变量的优先级吗,他们不是指向一个内存地址,所以所作的操作是不同的对象。这就是真正原因,、
—在for中的i隐式的定义了local,外部的i是全局变量,局部总是比全局优先,当局部域销毁时,局部变量随它被回收。
总结:
lua 中for也是有三个参数列表 跟c#一样。在lua中 i1,i2,step i1至i2以step作为步长, 若是step不指定 则默认步长为1。 每次循环完增加step。
在for中的i隐式的定义了local,外部的i是全局变量,局部总是比全局优先。当局部域销毁时,局部变量随它被回收。