On this page

Lua 循环

Lua 循环结构详解

Lua 提供了多种循环结构来处理重复任务,以下是 Lua 中所有循环方式的详细介绍:

1. while 循环

语法

while 条件 do
    -- 循环体
end

特点

  • 先判断条件,条件为真才执行循环体
  • 适用于循环次数不确定的情况

示例

-- 打印1到5
local i = 1
while i <= 5 do
    print(i)
    i = i + 1  -- 不要忘记改变循环条件!
end

2. repeat-until 循环

语法

repeat
    -- 循环体
until 条件

特点

  • 先执行一次循环体,再判断条件
  • 条件为真时退出循环
  • 类似于其他语言的 do-while 循环

示例

-- 输入验证
local answer
repeat
    print("请输入yes或no:")
    answer = io.read()
until answer == "yes" or answer == "no"

3. for 循环

数值型 for 循环

语法

for 变量 = 初始值, 结束值, 步长 do
    -- 循环体
end

特点

  • 步长可省略,默认为1
  • 循环变量是局部变量,只在循环内有效
  • 结束值在循环开始前计算,循环中修改不影响循环次数

示例

-- 打印1到10
for i = 1, 10 do
    print(i)
end

-- 打印10到1,步长-1
for i = 10, 1, -1 do
    print(i)
end

-- 打印1到10的奇数
for i = 1, 10, 2 do
    print(i)
end

泛型 for 循环

语法

for 变量列表 in 迭代器函数, 状态变量, 控制变量初值 do
    -- 循环体
end

特点

  • 常用于遍历表
  • 常与 pairs() 和 ipairs() 迭代器一起使用

示例

-- 遍历数组 (保持顺序)
local colors = {"red", "green", "blue"}
for index, value in ipairs(colors) do
    print(index, value)
end

-- 遍历表 (不保证顺序)
local person = {name="Lua", age=28, version=5.4}
for key, value in pairs(person) do
    print(key, value)
end

4. 循环控制语句

break

  • 立即退出当前循环
  • 只能用在循环体内
-- 查找第一个能被7整除的数
for i = 1, 100 do
    if i % 7 == 0 then
        print("找到: " .. i)
        break
    end
end

return

  • 退出当前函数和循环
  • 只能用在函数体内
local function findNumber(target)
    for i = 1, 100 do
        if i == target then
            return i  -- 退出函数并返回值
        end
    end
    return nil
end

5. 嵌套循环

循环可以嵌套使用,但要注意变量作用域:

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

6. 无限循环

使用 while true 或 repeat until false 创建无限循环,通常配合 break 使用:

-- 简单的命令行界面
while true do
    io.write("> ")
    local input = io.read()
    if input == "exit" then
        break
    end
    print("你输入了: " .. input)
end

循环选择建议

  1. 知道循环次数 → 使用 for 循环
  2. 循环次数不确定 → 使用 while 或 repeat-until
  3. 至少执行一次 → 使用 repeat-until
  4. 遍历表或数组 → 使用泛型 for 循环

理解这些循环结构及其适用场景,可以帮助你编写更高效、更清晰的 Lua 代码。