Lua中的可变参数
lua支持一个函数接受不指定数量的参数。
例如print()可以随意加参数数量。
print(1,2,3,4)
print('s',1,{1,2,3},true,nil)
我们自己定义的函数也可以接受可变参数。
function xxx(...)-- ...表示可变参数arg = {...} --可以将可变参数放入tablefor i, v in ipairs(arg) doprint(v)end
end
使用select
function foo(...)print(select(2, ...))print(select('#', ...))print(select(-2, ...))
end
select(n, …):当 n 为数字时,返回第 n 个及其之后的所有可变参数(多返回值)。
select(‘#’, …):返回可变参数的数量(一个数值)。
n 可以为负数,负索引从参数末尾计算(比如 select(-1, …) 返回最后一个参数)。
foo(2,'s',true, 33.44,55)
结果如下
s true 33.44 55
5
33.44 55
实战
实现函数接收可变参数,返回参数和以及平均值
第一种写法
local function foo2(...)local sum,count = 0,0for i = 1, select('#', ...) dolocal v = select(i, ...) -- 返回多个参数,只会把第一个赋值给vsum = sum + vcount = count + 1endreturn sum, sum/count
end
print(foo2(1,2,4,5,6,10))
第二种写法
local function foo3(...)local t = table.pack(...) -- 将可变参数放入表, 最后一个元素n对应表元素个数local sum,count= 0,t.nfor i,v in pairs(t) dosum = sum + vendreturn sum, sum/count
end
print(foo2(1,2,4,5,6,10))
【ps】table.pack是lua5.2版本之后提供的函数
结果为
28 4.6666666666667
