如何将表“解包”到函数参数中

时间:2014-03-16 06:45:02

标签: lua lua-table

我正在尝试在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>

3 个答案:

答案 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

更多信息:https://www.lua.org/manual/5.2/manual.html

答案 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()中必须执行的额外处理,以支持可变数量的命名参数。