约 1779 字

约 9 分钟

#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

更新: 2025/10/2

作者: PlanC

创建: 2025/9/29