有时需要进行规律性的重复操作,需要用到程序中的循环语句。
循环语句是由循环体及循环的终止条件两部分组成。
循环语句是在一定条件下反复执行一段程序的流程结构,被反复执行的程序称为循环体。
循环是否结束,取决于循环的终止条件。
1 Lua中的循环方式
循环类型 | 描述 |
while | 在条件为 true 时,循环体被重复执行。循环前先检查条件是否为 true |
for | 重复执行指定语句,重复次数可在 for 语句中控制 |
repeat...until | 重复执行循环,直到指定的条件为 true 时,结束循环 |
1.1 while 循环
while 循环的样式如下:
while(循环条件)
do
循环体
end
当循环条件为 true 时,循环执行,否则退出循环;
如果循环体中未对循环条件进行修改,循环将持续执行。
local a = 5
while(a > 0)
do
print("a = " .. a)
a = a - 1
end
输出如下
a = 5
a = 4
a = 3
a = 2
a = 1
1.2 for 循环
for 循环结构如下:
for 循环因子
do
循环体
end
do 的位置可以在第一行,也可以在第二行,语法没有强制要求。
循环因子,决定循环次数及被循环的数据,如数组或table类型的数据。
对数字进行循环:
for i = 1 , 5 do
print(i)
end
对数组数据进行循环打印
- ipairs() 方法可以可以对table数据中的数组进行遍历
name = {"ticktok", "facebook", "twitter", "google", "github"}
for i, v in ipairs(name) do
print(i, v)
end
输出如下
1 ticktok
2 facebook
3 twitter
4 google
5 github
1.3 repeate...until 循环
repeate 循环,是当until 后的条件为true时,结束循环。
在循环体中需要修改循环变量,否则会导致死循环。
index = 0
repeat
print("index " .. index)
index = index + 1
until(index == 5)
输出如下
index 0
index 1
index 2
index 3
index 4
2 循环控制语句
循环控制语句用于控制程序的流程,以实现程序的各种结构方式。
在 Lua 中支持以下控制语句
控制语句 | 描述 |
break语句 | 退出当前循环或语句,并开始脚本执行当前循环体之后的语句 |
goto语句 | 将程序的控制点转移到一个指定的标签处 |
2.1 break
如下程序中,当循环变量等于3时,循环将终止。
index = 0
repeat
print("index " .. index)
index = index + 1
if index == 3 then
break
end
until(index == 5)
输出
index 0
index 1
index 2
2.2 goto
首先需要定义一个能够用于跳转的标签,使用 ::标签名:: 进行定义,如
::abc::print("欢迎跳转到标签abc")
将循环及标签跳转加在一起,效果如下。
index = 0
repeat
print("index " .. index)
index = index + 1
if index == 3 then
goto abc
end
until(index == 5)
::abc::print("欢迎跳转到标签abc")
当循环变量 index 等于3时,程序将结束循环并跳转到标签 abc 的位置继续执行。
运行后输出如下
index 0
index 1
index 2
欢迎跳转到标签abc
- 需要注意的是:如果要跳转的标签在循环体之前,可能会造成程序死循环
如下代码中,当循环变量index等于3时,程序结束循环并通过goto跳转到循环体之前的标签处,当标签中的语句执行后,程序继续向下执行,又会进行到循环体中,从而造成死循环。这种情况是需要避免的。
::abc::print("欢迎跳转到标签abc")
index = 0
repeat
print("index " .. index)
index = index + 1
if index == 3 then
goto abc
end
until(index == 5)
2.3 死循环
即就是循环体重复执行,永远不会退出。
在上边的代码中,就是一个死循环。
一般来说,这种情况会对服务器资源造成占用,并有可能引发服务器资源内存资源耗尽而崩溃。
标签:语句,index,循环体,abc,Lua08,Lua,循环,print From: https://blog.51cto.com/u_113754/7581329