基本
使用函式定義的引數列表中的 ...
橢圓語法建立變數函式。
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