如何将表"解包"到函数参数中

cod*_*nds 15 lua lua-table

我试图在Lua中调用一个接受多个'number'参数的函数

function addShape(x1, y1, x2, y2 ... xn, yn)
Run Code Online (Sandbox Code Playgroud)

我有一个值表,我想作为参数传递

values = {1, 1, 2, 2, 3, 3}
Run Code Online (Sandbox Code Playgroud)

是否有可能在函数调用中动态"解包"(我不确定这是否是正确的术语)这些值?就像是..

object:addShape(table.unpack(values))
Run Code Online (Sandbox Code Playgroud)

相当于调用:

object:addShape(1, 1, 2, 2, 3, 3)
Run Code Online (Sandbox Code Playgroud)

抱歉,如果这是一个完全明显的Lua问题,但我不能为我的生活找到关于这个主题的任何内容.


UPDATE

unpack(values)也不起作用(深入研究方法addShape(...)并检查传递的值的类型显示unpack导致单个string.

Joh*_*nck 24

你要这个:

object:addShape(unpack(values))
Run Code Online (Sandbox Code Playgroud)

另见: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))
Run Code Online (Sandbox Code Playgroud)

  • 你从哪里获得你的值数组?投注类型(值[1])是"字符串".`...`没有类型,但将它传递给`type`就像传递第一个var-arg参数一样. (2认同)
  • @Nikos:仅供参考,`table.unpack` [应该适用于 Lua 5.2 及更高版本 /sf/ask/1805605511/价值] (2认同)

HSL*_*SLM 16

无论谁来到这里并且拥有 Lua 版本 > 5.1 解包,都会被移至表库中,以便您可以使用:table.unpack

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