Skip to content

循环

循环是编程中非常重要的控制结构,它允许我们重复执行一段代码。Lua 提供了多种循环结构,本章节将介绍这些循环的使用方法。

while 循环

while 循环会在条件为真时重复执行代码块:

lua
local i = 1
while i <= 5 do
  print(i)
  i = i + 1
end

输出:

1
2
3
4
5

for 循环

Lua 提供了两种 for 循环:数值 for 循环和泛型 for 循环。

数值 for 循环

数值 for 循环用于迭代数字范围:

lua
-- 基本形式:for 变量 = 起始值, 结束值, 步长 do
for i = 1, 5 do
  print(i)
end

输出:

1
2
3
4
5

可以指定步长:

lua
-- 步长为 2
for i = 1, 10, 2 do
  print(i)
end

输出:

1
3
5
7
9

步长也可以是负数:

lua
-- 倒序循环
for i = 5, 1, -1 do
  print(i)
end

输出:

5
4
3
2
1

泛型 for 循环

泛型 for 循环用于迭代表中的元素:

lua
-- 迭代数组
local fruits = {"苹果", "香蕉", "橙子"}
for i, fruit in ipairs(fruits) do
  print(i, fruit)
end

输出:

1	苹果
2	香蕉
3	橙子
lua
-- 迭代字典
local person = {name = "张三", age = 30, gender = "男"}
for key, value in pairs(person) do
  print(key, value)
end

输出:

name	张三
age	30
gender	男

repeat-until 循环

repeat-until 循环会先执行代码块,然后检查条件,如果条件为假,则继续循环:

lua
local i = 1
repeat
  print(i)
  i = i + 1
until i > 5

输出:

1
2
3
4
5

循环控制

break 语句

break 语句用于跳出当前循环:

lua
for i = 1, 10 do
  if i == 5 then
    break
  end
  print(i)
end

输出:

1
2
3
4

goto 语句

goto 语句可以跳转到指定的标签:

lua
for i = 1, 10 do
  if i == 5 then
    goto continue
  end
  print(i)
  ::continue::
end

输出:

1
2
3
4
6
7
8
9
10

循环嵌套

循环可以嵌套使用:

lua
-- 打印乘法表
for i = 1, 9 do
  for j = 1, i do
    io.write(j, "×", i, "=", i*j, "\t")
  end
  io.write("\n")
end

输出:

1×1=1	
1×2=2	2×2=4	
1×3=3	2×3=6	3×3=9	
1×4=4	2×4=8	3×4=12	4×4=16	
1×5=5	2×5=10	3×5=15	4×5=20	5×5=25	
1×6=6	2×6=12	3×6=18	4×6=24	5×6=30	6×6=36	
1×7=7	2×7=14	3×7=21	4×7=28	5×7=35	6×7=42	7×7=49	
1×8=8	2×8=16	3×8=24	4×8=32	5×8=40	6×8=48	7×8=56	8×8=64	
1×9=9	2×9=18	3×9=27	4×9=36	5×9=45	6×9=54	7×9=63	8×9=72	9×9=81

无限循环

如果循环条件永远为真,就会形成无限循环:

lua
-- 无限循环
while true do
  print("Hello")
  -- 这里应该有跳出循环的条件
end

循环性能

在 Lua 中,循环的性能取决于循环体的复杂度和循环的次数。以下是一些提高循环性能的建议:

  1. 避免在循环中进行复杂的计算
  2. 避免在循环中创建新的表或函数
  3. 对于大型循环,考虑使用局部变量来存储频繁访问的值

小结

本章节介绍了 Lua 中的循环结构,包括 while 循环、for 循环(数值 for 循环和泛型 for 循环)、repeat-until 循环,以及循环控制语句 break 和 goto。掌握这些循环结构,对于编写 Lua 程序非常重要。