基本
使用函数定义的参数列表中的 ...
椭圆语法创建变量函数。
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