Type: concept
Confidence: 0.88
Created: 2026-04-16
Updated: 2026-04-16
Tags: 技术Lua编程语言Lua编程

Lua 函数与多返回值

概述

Lua 函数是一等公民,支持多返回值、可变参数与闭包,是构建模块和 OOP 的基础语法单元。

关键内容

函数定义与调用

-- 全局函数
function sayHello()
    print("Hello")
end

-- 局部函数(推荐)
local function add(a, b)
    return a + b
end

sayHello()
print(add(3, 5))  -- 8

多返回值

Lua 原生支持函数返回多个值,无需包装成 table:

function calc(a, b)
    return a + b, a - b
end

local x, y = calc(8, 3)
print(x, y)  -- 11  5

多余的返回值被丢弃,变量不足时补 nil

local sum = calc(8, 3)   -- sum=11,第二个返回值被丢弃
local a, b, c = calc(8, 3)  -- c=nil

函数是一等公民

函数可以赋值给变量、作为参数传递、存入 table:

local ops = {
    add = function(a, b) return a + b end,
    sub = function(a, b) return a - b end,
}
print(ops.add(10, 3))  -- 13

可变参数

使用 ... 接收可变参数,select("#", ...) 获取参数个数:

local function sum(...)
    local total = 0
    for _, v in ipairs({...}) do
        total = total + v
    end
    return total
end
print(sum(1, 2, 3, 4))  -- 10

闭包

函数捕获外层局部变量(upvalue),形成闭包:

local function makeCounter()
    local count = 0
    return function()
        count = count + 1
        return count
    end
end

local counter = makeCounter()
print(counter())  -- 1
print(counter())  -- 2

尾调用优化

Lua 支持尾调用优化(TCO):形如 return f(...) 的调用不增加调用栈,适合递归算法。

冒号语法糖

在 OOP 场景下,obj:method(x)obj.method(obj, x) 的语法糖,自动传入 self。详见 Lua-OOP

常见坑

来源

相关