1768

9 分钟

#Lua 的函数

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

  1. 模块化:将程序分解为更小、更易管理的部分
  2. 重用性:函数可以被多次调用,避免重复编写相同代码
  3. 封装性:隐藏实现细节,只暴露必要接口

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

-- 定义函数 function 函数名(形式参数1, 形式参数2, ...) 函数体 end
  • 函数名:函数的名称,遵守和变量名一样的 命名规则
  • 形式参数列表:形式参数就像是占位符,调用函数时被实际参数赋值
  • 函数体:函数内部要执行的代码,通过 return 关键字返回函数的结果
-- 调用函数 函数名(实际参数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/9/29

更新于 2025/9/29