国际访客建议访问 Primers 编程伙伴 国际版站点 > Lua 教程 > 函数 以获得更好的体验。

# Lua 的函数

函数(Function)是可以重复调用的代码片段,可以接收输入参数并返回结果。具有以下特点:

  1. 模块化:将程序分解为更小、更易管理的部分

  2. 重用性:函数可以被多次调用,避免重复编写相同代码

  3. 封装性:隐藏实现细节,只暴露必要接口

定义函数和调用函数 的语法如下:

-- 定义函数
function 函数名(形式参数1, 形式参数2, ...)
    函数体
end
  • 函数名:函数的名称,遵守和变量名一样的 命名规则

  • 形式参数列表:形式参数就像是占位符,调用函数时被实际参数赋值

  • 函数体:函数内部要执行的代码,通过 return 关键字返回函数的结果,Lua 支持多返回值

-- 调用函数
函数名(实际参数1, 实际参数2, ...)

示例:

-- 定义函数
function max(x, y)
    if x > y then   -- 如果 x 大于 y,则
        return x    -- 返回 x
    else            -- 否则
        return y    -- 返回 y
    end
end

print("1 和 2 中", max(1, 2), "更大")
print("666 和 233 中", max(666, 233), "更大")
print("9 和 -8 中", max(9, -8), "更大")

运行结果:

1 和 2 中       2       更大
666 和 233 中   666     更大
9 和 -8 中      9       更大

# 可变长参数

定义函数时可以在参数列表的末尾使用 ... 表示可变长参数,该参数可以接收任意数量的实际参数。

示例:

-- 定义函数
function max(...)
    local args = {...}  -- 通过表接收可变长参数
    table.sort(args)    -- 排序
    return args[#args]  -- 返回最大的值
end

print(max(2, 2))
print(max(1, 3, 2))
print(max(3, 7, 2, 4, 6, 1, 5))

运行结果:

2
3
7

# 参数默认值

Lua 不支持参数默认值,但是可以通过判断参数值是否为 nil 来检测是否传递了实参,从而实现类似的功能。

示例:

-- 定义函数
function max(x, y)
    x = x or 0      -- x 为 nil 或 false 时,使用默认值 0
    y = y or 0      -- y 为 nil 或 false 时,使用默认值 0

    if x > y then   -- 如果 x 大于 y,则
        return x    -- 返回 x
    else            -- 否则
        return y    -- 返回 y
    end
end

print(max(1, 2))
print(max(1))
print(max())

运行结果:

2
1
0

x = x or 0 这样的方式简单方便,但无法区分 nilfalse;如果需要区分则可以使用 if x == nil then x = 0 end 的形式。

本文 更新于: 2025-11-27 09:38:12 创建于: 2025-11-27 09:38:12