Lua跟许多语言一样,提供了可边长函数参数的方式,那我们如果对这一组可变长参数进行遍历呢,lua为我们提供了两种方式,这两种方式各有优劣,我们一起来看一下。
第一种:直接对参数进行遍历
function add(...)
local s = 0
for _,v in ipairs(...) do
s = s+v
end
return s
end
这种方式十分简便,但是有个问题,它会自动跳过nil值,但是有时候我们需要取判断某个值是不是nil的时候,这种方法就做不到了。
第二种,使用table.pack 方法将变长参数打包成一个数组,此时会保存nil
function add(...)
local s = 0
local args = table.pack(...)
for i=1,args.n do
s = s + args[i]
end
return s
end
在参数比较少的时候,创建一个新表args显然是不怎么合算的。此时我们有第三种遍历方式,通过select函数执行
function add(...)
local s = 0
for i=1 , select('#',...) do
s = s + select(i,...)
end
return s
end
select函数的作用是,取出…第i个参数后面所有参数,但是使用在+运算符后只取一个返回值,这样就可以作为取出…第i个返回值的作用了。但是这种方式在参数比较多的情况下,select的消耗会远远大于创建一个table的消耗。因此不如第二种方式更加合理。