Lua 循环

Lua 循环

终止条件永远是循环的核心

很多情况下我们需要做一些有规律性的重复操作,因此在程序中就需要重复执行某些语句。

一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。

循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。

循环语句是由循环体及循环的终止条件两部分组成的。

Lua 语言提供了以下几种循环处理方式:

循环类型 描述
while 循环 在条件为 true 时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true。
for 循环 重复执行指定语句,重复次数可在 for 语句中控制。
repeat...until 重复执行循环,直到 指定的条件为真时为止
循环嵌套 可以在循环内嵌套一个或多个循环语句(while do ... end;for ... do ... end;repeat ... until;)

循环控制语句

循环控制语句用于控制程序的流程, 以实现程序的各种结构方式。

Lua 支持以下循环控制语句:

竟然没有continue

控制语句 描述
break 语句 退出当前循环或语句,并开始脚本执行紧接着的语句。
goto 语句 将程序的控制点转移到一个标签处。

无限循环

在循环体中如果条件永远为 true 循环语句就会永远执行下去,以下以 while 循环为例:

while( true )
do
   print("循环将永远执行下去")
end

for 循环

这里的for循环和shell以及cmd等脚本语言类似,包含两种类型

  • 数值循环

  • 泛型循环(像java的foreach)

数值循环

语法

for var=exp1,exp2,exp3 do  
    <执行体>  
end  

var 从 exp1 变化到 exp2,

每次变化以 exp3 为步长递增 var,

并执行一次 "执行体"

exp3 是可选的,如果不指定,默认为1。

实例:

for i = 10, 1, -1 do
    print(i)
end

实例:

用函数获取到exp2

function f(x)
    print("function")
    return x * 2
end
for i = 1, f(5) do
    print(i)
end

泛型循环

语法:

--打印数组a的所有值  
a = {"one", "two", "three"}
for i, v in ipairs(a) do
    print(i, v)
end 
  • i是数组索引值,

  • v是对应索引的数组元素值。

  • ipairs是Lua提供的一个迭代器函数,用来迭代数组。

while 循环

Lua 编程语言中 while 循环语句在判断条件为 true 时会重复执行循环体语句。

语法

while(condition)
do
   statements
end

实例

a=10
while( a < 20 )
do
   print("a 的值为:", a)
   a = a+1
end

repeat...until

Lua 编程语言中 repeat...until 循环语句不同于 for 和 while循环,

for 和 while 循环的条件语句在当前循环执行开始时判断,

而 repeat...until 循环的条件语句在当前循环结束后判断。

相当于java中的 do……while……

语法

repeat
   statements
until( condition )

实例:

--[ 变量定义 --]
a = 10
--[ 执行循环 --]
repeat
    print("a的值为:", a)
    a = a + 1
until (a > 15)

break 语句

Lua 编程语言 break 语句插入在循环体中,用于退出当前循环或语句,并开始脚本执行紧接着的语句。

如果你使用循环嵌套,break语句将停止最内层循环的执行,并开始执行的外层的循环语句。

实例:

--[ 定义变量 --]
a = 10

--[ while 循环 --]
while (a < 20)
do
    print("a 的值为:", a)
    a = a + 1
    if (a > 15)
    then
        --[ 使用 break 语句终止循环 --]
        break
    end
end

goto 语句

竟然保留了goto语句

goto是5.3以后才有的功能,所以目前环境用不了

语法

语法格式如下所示:

goto Label

Label 的格式为:

:: Label ::

以下实例在判断语句中使用 goto:

for i = 1, 10 do
    if i % 3 ~= 0 then
        goto workflow
    end
    print(i)
    :: workflow ::
end
posted @ 2023-05-14 21:04  红尘过客2022  阅读(55)  评论(0编辑  收藏  举报