Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 如何';拆包';将表转换为函数参数_Lua_Lua Table - Fatal编程技术网

Lua 如何';拆包';将表转换为函数参数

Lua 如何';拆包';将表转换为函数参数,lua,lua-table,Lua,Lua Table,我试图在Lua中调用一个接受多个“number”参数的函数 function addShape(x1, y1, x2, y2 ... xn, yn) values = {1, 1, 2, 2, 3, 3} 我有一个值表,我想把它作为参数传递 function addShape(x1, y1, x2, y2 ... xn, yn) values = {1, 1, 2, 2, 3, 3} 是否可以在函数调用中动态地“解包”(我不确定这是否是正确的术语)这些值?类似于 object:addSh

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

function addShape(x1, y1, x2, y2 ... xn, yn)
values = {1, 1, 2, 2, 3, 3}
我有一个值表,我想把它作为参数传递

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
会产生一个
字符串

您想要:

object:addShape(unpack(values))
另见:

下面是一个完整的示例:

shape = {
  addShape = function(self, a, b, c)
    print(a)
    print(b)
    print(c)
  end
}

values = {1, 2, 3}
shape:addShape(unpack(values))

这不是一个关于解包的答案,而是一个使用不同技术的建议

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()中进行的解包和附加处理类似支持可变数量的命名参数。

我应该添加,我最初只是尝试
解包
,但这也不起作用-传递的参数类型变成单个
字符串
尝试完全按照我链接的文档中显示的方式执行。让我们知道这是否有效。我已经查看了进入
addShape
方法并检查
..
的类型。这是一个
字符串
-文档似乎准确地说明了我想要什么,但我不知道为什么
unpack
打包
返回一个
字符串
从哪里获得值数组?打赌类型(值[1])是“字符串”.
..
没有类型,但是将其传递给
类型
就像传递第一个var arg参数一样。@Nikos:仅供参考,
表。解包
[对于此解决方案,应该在Lua 5.2和更高版本-1中工作。不仅要创建一个新表来调用函数getPairs()但您也可以为传入参数中的每一对值创建一个新表。与使用unpack()相比,这非常昂贵。@simon同意,我将继续删除,我明白了。@ZzZombo我意识到其他人可以从我的错误和simon的评论中学习,所以我将把它作为一个不应该做的示例:)好吧,很公平。