简介
在计算机程序设计,一个可变参数函数是指一个函数拥有不定引数,即是它接受一个可变数目的参数。简单来说,就是函数的参数个数可变,参数类型不定的函数。
Lua编程语言中,用 … 表示函数的可变参数,形式如下:
function funcname(...)
--parse arguments and do something
end
既然可变参数的参数个数、参数类型都不是固定的,那么必然需要在函数内部进行正确的解析才能正确的使用这些参数。
解析可变参数
解析的方法主要有2种:
- 把 … 可变参数封装到table中,然后通过table的长度获取可变参数的长度,通过遍历table的元素值得到对应参数的值。
- 通过select函数获取 … 可变参数的长度和各个参数的值。
2中方法的例子如下:
print('--------------------------------------------------------------------')
local function func_args_print(...)
local args = {...}
local argcnt = #args
for i=1,argcnt do
local v = args[i]
if type(v) == 'table' then
io.write(i, '\t{')
for k1, v1 in pairs(v) do
io.write(v1, ', ')
end
io.write('}\n')
else
print(i, v)
end
end
end
func_args_print(1, 2.0, 'str', {'hello', 'world'}, nil, 100)
print('--------------------------------------------------------------------')
local function func_args_select(...)
local argcnt = select('#', ...)
for i=1,argcnt do
local v = select(i, ...)
if type(v) == 'table' then
io.write(i, '\t{')
for k1, v1 in pairs(v) do
io.write(v1, ', ')
end
io.write('}\n')
else
print(i, v)
end
end
end
func_args_select(1, 2.0, 'str', {'hello', 'world'}, nil, 100)
print('--------------------------------------------------------------------')
上述例子中,
func_args_print(…)函数通过table的方式解析了可变参数
func_args_select(…)函数通过select的方式解析了可变参数
运行效果如下:
可以发现,运行结果一模一样。