如何将元组作为参数传递给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,它似乎蟒蛇与摔跤运营商*它。

+1

“*所以我可以写*”这不是有效的Lua。 'f ... f'不是合法的Lua语法。所以我不明白你想要什么。 –

+1

[此页](http://lua-users.org/wiki/FunctionalTuples)可能会对您有所帮助。 – Thelmund

+1

@NicolBolas您可以编写例如f(f(1,2)),f(f(f(1,2)))等等,对于f的任何数量的应用。这就是我用'...'和'重复申请'的意思。 – tinlyx

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