lua中处理变参数的一些技巧
- return - 为着理想勇敢前进从lua 5.1开始,就不鼓励用隐含的arg来处理可变变量了,推荐做法是使用递归来处理.... 在lua中,不论多返回值还是函数调用,...都只能用于最后剩下的参数,例如下列代码中. 这是因为第一个print调用是把...作为剩余的所有参数传进去,而第二次调用,...则被调整为1个参数. 如果要想把参数添加到...后面,有两种做法.
function f(...)输出为:
print("a", ...)
print(..., "a")
end
f("1", "2")
a 1 2这是因为第一个print调用是把...作为剩余的所有参数传进去,而第二次调用,...则被调整为1个参数。如果要想把参数添加到...后面,有两种做法。
1 a
local tinsert = table.insert第二种做法则是使用递归:
local function append(x, ...)
local t = {...}
tinsert(t, x)
return unpack(t)
end
local function append(x, arg1, ...)当参数较少时(在我的机器上大概10个以下参数时),第二种做法更快。不过,第二种做法的另一个优势是没有分配堆内存,因而可以减少垃圾收集的次数。
if arg1 == nil then
return x
else
return arg1, append(x, ...)
end
end