目录

  1. 什么是 Lua 循环
  2. 为什么要使用循环
  3. Lua 循环的类型
  4. 代码示例
  1. 循环控制语句
  2. 工作原理详解
  3. 优点与应用场景
  4. 常见问题与注意事项
  5. 参考资料与出站链接

什么是 Lua 循环

Lua 循环是指在 Lua 语言中使用特定的语法结构重复执行一段代码,直到满足某个条件。Lua 提供了三种主要循环类型:whileforrepeat-until,以及循环控制语句 breakgoto


为什么要使用循环

  • 重复任务:自动化执行重复性操作。
  • 数据处理:遍历表或数组中的元素。
  • 效率提升:减少手动编写重复代码。
  • 逻辑控制:根据条件动态调整执行流程。

Lua 循环的类型

  1. while 循环:条件为真时重复执行。
  2. for 循环
  • 数值型:按步长迭代固定范围。
  • 泛型:遍历表或迭代器。
  1. repeat-until 循环:至少执行一次,直到条件为真时停止。

代码示例

while 循环

-- while 循环
local count = 3
while count > 0 do
    print("倒计时: " .. count)
    count = count - 1
end
print("结束!")

运行结果:

倒计时: 3
倒计时: 2
倒计时: 1
结束!

for 循环

数值型 for

-- 数值型 for 循环
for i = 1, 5, 2 do  -- 从 1 到 5,步长 2
    print("i: " .. i)
end

运行结果:

i: 1
i: 3
i: 5

泛型 for(遍历表)

-- 泛型 for 循环
local fruits = {"苹果", "香蕉", "橙子"}
for index, value in ipairs(fruits) do
    print("索引: " .. index, "值: " .. value)
end

运行结果:

索引: 1    值: 苹果
索引: 2    值: 香蕉
索引: 3    值: 橙子

repeat-until 循环

-- repeat-until 循环
local num = 0
repeat
    print("数字: " .. num)
    num = num + 1
until num > 2

运行结果:

数字: 0
数字: 1
数字: 2

嵌套循环与控制

-- 嵌套循环与 break
for i = 1, 3 do
    for j = 1, 3 do
        if j == 2 then
            break  -- 跳出内层循环
        end
        print("i: " .. i, "j: " .. j)
    end
end

运行结果:

i: 1    j: 1
i: 2    j: 1
i: 3    j: 1

循环控制语句

  • break:立即退出当前循环。
  • goto(Lua 5.2+):跳转到指定标签。
  local i = 0
  while true do
      i = i + 1
      if i > 3 then
          goto done
      end
      print("i: " .. i)
  end
  ::done::
  print("完成")

运行结果:

i: 1
i: 2
i: 3
完成

工作原理详解

  • while:每次迭代前检查条件,条件为假时退出。
  • for
  • 数值型:内部维护计数器,按步长递增或递减。
  • 泛型:调用迭代器函数(如 ipairspairs)逐个返回元素。
  • repeat-until:先执行循环体,后检查条件。
  • 控制流breakgoto 修改执行路径。

优点与应用场景

优点

  • 多样性:三种循环适应不同需求。
  • 简洁:语法直观,易于理解。
  • 灵活:支持嵌套和控制语句。

应用场景

  • while:不确定次数的循环(如等待输入)。
  • for:遍历数组或执行固定次数任务。
  • repeat-until:确保至少执行一次的场景。

常见问题与注意事项

  1. 死循环
  • 检查条件是否会变为假,避免无限循环。
  1. for 步长
  • 步长为负时,起始值需大于结束值。
  1. 泛型 for
  • ipairs 只遍历连续数字索引,pairs 遍历所有键值对。
  1. 局部变量
  • 循环变量建议用 local,提升性能。
  1. goto 使用
  • 谨慎使用,避免代码混乱。

参考资料与出站链接

  1. 官方文档
  1. 学习资源
  1. 工具支持

如果您需要更复杂的循环示例(如嵌套表遍历),请告诉我,我会进一步扩展!