函数多吃返回的特殊函数unpack,接收一个数组作为输入参数,返回数组的所有原始。Unpack被用来实现泛型调用机制,在C语言中可以使用函数指针调用可变的函数,可以声明参数可变的函数,但是不能两者同时可变,在Lua中入过你想调用可变参数的可变函数只需要这样:
f(unpack(a))
unpack返回a所有的元素作为f()的参数
f = string.find
a = {"hello","ll"}
print(f(unpack(a)))
预定义unpack函数使用C语言实现的,我们也可以用Lua来完成:
function unpack(t,i)
i = i or 1
if t[i] then
return t[i],unpact(t,i + 1)
end
end
可变参数
Lua函数可以接受可变数目的参数,和C语言类似在函数参数列表中使用(...)表示函数有可变的参数。。Lua将函数的参数放在一个叫arg的表中,除了参数以外,表中还有一个域n表示参数的个数。
有时候,我们可能需要几个固定参数加上可变参数
printResult = ""
function print(...)
for i,v in ipairs(arg) do
printResult = printResult .. tostring(v).."\t"
end
printResult = printResult .. "\n"
end
function g (a,b,...) end
CALL PARAMETERS
g(3) a = 3,b = nil ,arg = {n = 0}
g(3,4) a = 3,b = 4 ,arg = {n = 0}
g(3,4,5,8) a = 3,b = 4 arg = {5,8;n = 2}
function select(n,...) return arg[n]end
print(string.find("hello hello","ll"))print(select(1,string.find("hello hello","ll")))print(select(2,string.find("hello hello","ll")))
有时候需要将函数的可变参数传递个另外的函数调用,可以使用unpack(arg)返回arg表说有的可变参数,Lua提供了一个文本格式化的函数string.format(类似C 语言的sprintf函数):
function fwite(fmt,...)
return io.write(string.format(fmt,unpack(arg)))
end