如何将元组作为参数传递给Lua函数?
问题描述:
有没有办法传递一个元组作为Lua函数的参数?如何将元组作为参数传递给Lua函数?
例如,我有一个返回多个值
function f(a,b) return b,a end
的功能,我想反复使用这个功能f
,因此我可以这样写:
f (f ... f(1,2))
但是,如果我需要什么将这个初始元组(1,2)
作为变量存储init
?
f (f ... f(init))
有支持吗?
根据this answer,它似乎蟒蛇与摔跤运营商*
它。
答
Lua没有“元组”。
当函数返回多个值时,它将返回多个值。它们不是放在一起的一些数据结构;他们是不同的价值观。如果要将多个返回值存储在单个数据结构中,则必须实际执行此操作。
Lua 5.2具有table.pack
函数,您可以使用该函数将多个返回值存储在表中。但它这样做的,这样你以后可以分解它们的方式:
local values = table.pack(f(1, 2))
f(table.unpack(values, values.n))
unpack
存在在Lua 5.1,但pack
没有。你可以很容易地模拟:
function pack(...)
return {n = select("#", ...), ...}
end
“*所以我可以写*”这不是有效的Lua。 'f ... f'不是合法的Lua语法。所以我不明白你想要什么。 –
[此页](http://lua-users.org/wiki/FunctionalTuples)可能会对您有所帮助。 – Thelmund
@NicolBolas您可以编写例如f(f(1,2)),f(f(f(1,2)))等等,对于f的任何数量的应用。这就是我用'...'和'重复申请'的意思。 – tinlyx