基本

使用函式定義的引數列表中的 ... 橢圓語法建立變數函式。

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