Skip to content

Lua 函数

Lua 中函数的定义是以 function 关键字开头, 后跟函数名与参数列表, 以 end 结尾; 可以没有返回值,也可以一次性返回多个值;

固定参数的函数

Lua 中的函数在调用时与Java中的方法调用不同; 不要求实参的个数必须与函数中的形参个数相同; 如果实参个数小于形参个数,则系统自动使用nil填充, 如果实参个数多于形参个数,多出的将被系统自动忽略;

示例如下所示:

lua
-- function_test_01.lua

-- 定义一个普通函数 包含两个形参
function f(a, b)
    print(a, b)
end

-- 调用函数: 无实参传递
print("调用函数: 无实参传递")
f()

-- 调用函数:传一个实参
print("调用函数:传一个实参")
f(10)

-- 调用函数:传两个实参
print("调用函数:传两个实参")
f(10, 20)

-- 调用函数:传三个实参
print("调用函数:传三个实参")
f(10, 20, 30)

执行结果如下:

可变参函数

在函数定义时不给出具体形参的个数,而是使用三个连续的点号...,在函数调用时就可以向该函数传递任意个数的参数, 函数可以全部接收;

示例如下:

lua
-- function_test_02.lua

-- 定义一个可变参的函数
function f(...)
    -- 本地变量,并接收可变参数
    local a, b, c, d = ...
    print(a, b, c, d)
    print(...)  -- 会将 ... 所有参数均输出
end

-- 传递三个实参
print("传递三个实参")
f(10, 20, 30)

-- 传递四个实参
print("传递四个实参")
f(10, 20, 30, 40)

-- 传递五个实参
print("传递五个实参")
f(10, 20, 30, 40, 50)

执行结果如下所示:

返回多个值的函数

Lua 的函数一次可以返回多个值,但是需要有多个变量来同时接收;

lua
-- function_test_03.lua

-- 定义一个返回多个值的函数
function f(a, b)
    local sum = a+b
    local mul = a-b
    return sum, mul
end

-- 一次接收两个值
m, n = f(3, 5)

print(m, n)

执行结果如下:

函数作为参数

Lua 的函数中, 允许函数作为参数, 作为参数的函数可以是已经定义好的普通函数,也可以是匿名函数;

lua
-- function_test_04.lua

-- 定义普通函数
function sum(a, b)
    return a+b
end

function mul(a, b)
    return a-b;
end

-- 函数作为参数
function f(m, n, fun)
    local result = fun(m, n)
    print(result)
end

-- 调用
f(3, 5, sum)

-- 匿名函数调用
f(3, 5, function (a, b)
            return a - b
        end
)

执行结果如下: