基本

使用函数定义的参数列表中的 ... 椭圆语法创建变量函数。

function id(...)
    return
end

如果你将此函数称为 id(1, 2, 3, 4, 5),那么 ...(AKA vararg 列表)将包含值 1, 2, 3, 4, 5

函数可以使用必需的参数以及 ...

function head(x, ...)
    return x
end

从 vararg 列表中提取元素的最简单方法是简单地从中分配变量。

function head3(...)
    local a, b, c = ...
    return a, b, c
end

select() 也可用于间接查找元素数量和从 ... 中提取元素。

function my_print(...)
    for i = 1, select('#', ...) do
        io.write(tostring(select(i, ...)) .. '\t')
    end
    io.write '\n'
end

通过使用 {...}... 可以装入桌子以方便使用。这会将所有参数放在表的顺序部分中。

Version >= 5.2

table.pack(...) 也可用于将 vararg 列表打包到表中。table.pack(...) 的优点是它将返回表的 n 字段设置为 select('#', ...) 的值。如果你的参数列表可能包含 nils,这很重要(请参阅下面的备注部分)。

function my_tablepack(...)
    local t = {...}
    t.n = select('#', ...)
    return t
end

vararg 列表也可以从函数返回。结果是多次退货。

function all_or_none(...)
    local t = table.pack(...)
    for i = 1, t.n do
        if not t[i] then
            return    -- return none
        end
    end
    return ...    -- return all
end