1.select处理可变参数
select(n,...) 表示获取可变参数从第 n 个参数开始的部分数据
select("#",...) 表示获取可变参数的元素个数
Lua
function fun1(...)
print(select("#",...));
print(select(1,...));
end
fun1(1,2,3,4,5);
运行结果:
Lua
5
1 2 3 4 5
扩展:函数多个返回值的输出打印时,如果前面的函数加了小括号只会打印第一个值,不加小括号会打印所有的值;在print中调用两个有多个返回值的函数时,第一个函数会打印第一个值,后面的函数如果没有加小括号则会打印所有的值
Lua
function fun1(...)
return 11,22,33;
end
function fun2(...)
return 44,55,66;
end
print(fun1());
print((fun1()));
print("------------")
print(fun1(),fun2());
select获取可变参数,实现求和
Lua
function sum(...)
local sum=0;
count=select("#",...);
for i=1,count do
sum=sum+(select(i,...))
end
return sum;
end
print(sum(1,2,3,4,5));
2.pack处理可变参数
用table.pack(...) 获取可变参数,在最后会固定追加n和参数个数
Lua
function sum(...)
local ti=table.pack(...);
sum1=0;
for k,v in pairs(ti) do
if(k~='n')then
sum1=sum1+v;
end
end
return sum1;
end
print(sum(1,2,3,4,5));
在遇到返回值是可变参数时,可用 table.unpack(list, i, j) 获取第 i 位置到第 j 位置的返回值,list是数组,i 是起始位置返回值,j 是终止位置的返回值
Lua
function sum(...)
local ti=table.pack(...);
if ti.n==1 then
return ti[1];
end
if ti.n==2 then
return ti[1],ti[2];
end
if ti.n==3 then
return ti[1],ti[2],ti[3];
end
if ti.n==4 then
return ti[1],ti[2],ti[3],ti[4];
end
if ti.n==5 then
return ti[1],ti[2],ti[3],ti[4],ti[5];
else
return ti[1],ti[2],ti[3],ti[4],ti[5];
end
end
print(table.unpack(table.pack(sum(1,2,3,4,5,6)),2,5));
运行结果:
Lua
2 3 4 5
可变参数当成表来处理
Lua
function sum(...)
local ti={...};
for index, value in pairs(ti) do
print(index,value);
end
end
print(sum(1,2,"123",nil,5,6));
用"#"来获取表的长度
Lua
function sum(...)
local ti={...};
local count=#ti;
for index=1,count,1 do
print(index,ti[index]);
end
end
print(sum(1,22,"123",nil,5,6));