循环
既然同为编程语言,那么控制逻辑里的循环就不能缺少,它可以帮助我们实现有规律的重复操作,而循环一般由循环体和停止条件组成。而lua的循环可以由 while
for
repeat ... util
和 goto
实现。
while实现循环
while实现循环在很多编程语言中都有见到,应该是我们最熟悉的方式。
while (condition) do
something
end
当其中condition为true时,执行循环体something,这个常见理解简单。
for实现循环
for循环也是常见的,但是因lua的不同有些还需要注意。
- 数值循环遍历
for i = exp1,exp2,exp3 do
something
end
这里的语句意思是i在区间[exp1,exp2]之间按照步长exp3推进,一般步长不写默认为1。
for i = 3,1,-1 do
print(i)
end
-- 打印结果
3
2
1
- table循环遍历
local a = {a = "1",b = "2",c = "3"}
for k,v in pairs(a) do
print(k .. " : " .. v)
end
-- 打印结果
a : 1
b : 2
c : 3
这里可以借用函数pairs解析其中的键值对。
- list数组循环遍历
local b = {1,2,3,4,5}
for k,v in ipairs(b) do
print(k .. " : " .. v)
end
--打印结果
1 : 1
2 : 2
3 : 3
4 : 4
5 : 5
这里借用了ipairs函数解析数组,注意lua中的数组下标是从1开始的。
repeat … util 实现循环
这个类似于 do ... while
,只不过这里只有循环条件为true才会停止执行循环,而 do ... while
循环是当条件为false才会停止循环。
local i = 1
repeat
print(i)
i = i + 1
until i > 3
-- 打印结果
1
2
3
goto实现循环
goto语句其实也很熟悉了,c语言中就有,但是java中就没有。但是由于这种语句不利于代码的阅读,一般都不太推荐使用。
local i = 1
-- 定义label s1
:: s1 :: print(i)
i = i + 1
if i <= 3 then
-- 跳转到定义的label s1
goto s1
end
-- 打印结果
1
2
3
在lua中没有continue关键字,所以也并不提供这个功能,但是使用goto就可以实现这个功能。
for i = 1,3 do
if i == 2 then
goto s2
end
print(i)
:: s2 ::
end
-- 打印结果
1
3
当然想要跳出循环可以使用break,但是break对于goto实现的循环不能起到跳出循环的作用,会引起报错。
for i = 1,3 do
if i == 2 then
break
end
print(i)
end
-- 打印结果
1
这便是lua中所有实现循环的方式了,希望对你有用。