在Lua5.2之前,函数的可变参数在函数调用的时候自动获取并放在arg变量(table)中,要访问每一可变参数只需要通过arg[0], arg[1],…..arg[m]来获取,并且arg中还有一个域n负责记录可变参数的个数,示例代码如下所示:

1
2
3
4
5
6
7
function (a, b, ...)
local sum = a + b
for i = 1,arg.n do
sum = sum + arg[n]
end
return sum
end

在Lua5.2之后,需要自己手动获取可变参数,也没有了记录可变参数个数的域n,但可以通过长度运算符#获取参数个数,我想这也是为什么会去掉域n的原因,示例代码如下所示:

1
2
3
4
5
6
7
8
function (a, b, ...)
local arg = {...}
local sum = a + b
for i = 1, #arg do
sum = sum + arg[i]
end
return sum
end