Lua 如何';拆包';将表转换为函数参数
我试图在Lua中调用一个接受多个“number”参数的函数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
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的评论中学习,所以我将把它作为一个不应该做的示例:)好吧,很公平。