控制结构

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是全局变量,局部总是比全局优先。当局部域销毁时,局部变量随它被回收。