如何将表格“拆包”为函数参数

我正在尝试调用一个在 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导致单个字符串)。

点赞
用户4323
用户4323

你需要这个:

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))
2014-03-16 06:48:26
用户869951
用户869951

这不是有关解压的答案,而是建议使用不同的技术。请改用以下代码:

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()中做额外的处理以支持命名参数的可变数量。

2014-03-16 16:17:27
用户2763028
用户2763028

谁在这里,且拥有 Lua 版本号大于 5.1,将被移入到表库中,你可以使用:table.unpack

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

2021-07-21 06:12:04