函数返回值

    返回多个值时,值之间用“,”隔开。

    1. local function swap(a, b) -- 定义函数 swap,实现两个变量交换值
    2. return b, a -- 按相反顺序返回变量的值
    3. end
    4. local x = 1
    5. local y = 20
    6. x, y = swap(x, y) -- 调用 swap 函数

    调整规则:
    若返回值个数大于接收变量的个数,多余的返回值会被忽略掉;
    若返回值个数小于参数个数,从左向右,没有被返回值初始化的变量会被初始化为 nil。

    当一个函数有一个以上返回值,且函数调用不是一个列表表达式的最后一个元素,那么函数调用只会产生一个返回值, 也就是第一个返回值。

    1. local function init() -- init 函数 返回两个值 1 "lua"
    2. return 1, "lua"
    3. end
    4. local x, y, z = init(), 2 -- init 函数的位置不在最后,此时只返回 1
    5. print(x, y, z) -->output 1 2 nil
    6. print(a, b, c) -->output 2 1 lua

    函数调用的实参列表也是一个列表表达式。考虑下面的例子:

    如果你确保只取函数返回值的第一个值,可以使用括号运算符,例如

    1. local function init()
    2. return 1, "lua"
    3. end
    4. print((init()), 2) -->output 1 2
    5. print(2, (init())) -->output 2 1

    值得一提的是,如果实参列表中某个函数会返回多个值,同时调用者又没有显式地使用括号运算符来筛选和过滤,则这样的表达式是不能被 LuaJIT 2 所 JIT 编译的,而只能被解释执行。