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