我正在尝试在Lua中调用一个接受多个'number'参数的函数
function addShape(x1, y1, x2, y2 ... xn, yn)
我有一个值表,我想将其作为参数传递
values = {1, 1, 2, 2, 3, 3}
是否可以在函数调用中动态“解包”(我不确定这是否是正确的术语)这些值?像...这样的东西。
object:addShape(table.unpack(values))
相当于致电:
object:addShape(1, 1, 2, 2, 3, 3)
道歉,如果这是一个非常明显的Lua问题,但我不能为我的生活找到关于这个主题的任何内容。
更新
unpack(values)
也不起作用(深入研究方法addShape(...)
并检查传递的值类型,发现unpack
导致单个string
。< / p>
答案 0 :(得分:24)
你想要这个:
object:addShape(unpack(values))
另请参阅:http://www.lua.org/pil/5.1.html
这是一个完整的例子:
shape = {
addShape = function(self, a, b, c)
print(a)
print(b)
print(c)
end
}
values = {1, 2, 3}
shape:addShape(unpack(values))
答案 1 :(得分:0)
谁来这里并且有 Lua 版本 > 5.1 解包被移到表库中,以便您可以使用:table.unpack
答案 2 :(得分:-5)
这不是关于解压缩的答案,而是建议使用不同的技术。相反,做
function object:addShape(values)
for i,v in ipairs(values) do
x,y = v.x, v.y
...
end
end
function getPairs(values)
xyPairs = {}
for i=1,#values,2 do
v = {x=values[i], y=values[i+i] }
table.insert(xyPair, v)
end
return xyPairs
end
values = {1, 1, 2, 2, 3, 3}
object:addShape(getPairs(values))
要完成的工作量应该类似于解包和在addShape()中必须执行的额外处理,以支持可变数量的命名参数。