如何将元组作为参数传递给Lua函数?

5
有没有一种方法可以将元组作为Lua函数的参数传递?
例如,我有一个返回多个值的函数。
function f(a,b)  return b,a end

我希望这个函数 f 能够重复应用,这样我就可以写:

f (f ... f(1,2))

但如果我需要把这个初始元组(1,2)存储在变量init中怎么办?

f (f ... f(init))

这个有支持吗?

根据这个回答,似乎Python有使用splat操作符*的支持。


1
所以我可以编写”这不是有效的Lua代码。“f ... f”不是合法的Lua语法。因此,我不明白你在这里想要什么。 - Nicol Bolas
1
这个页面可能会对你有所帮助:http://lua-users.org/wiki/FunctionalTuples。 - Thelmund
2
@NicolBolas 你可以写例如 f( f (1,2)), f (f ( f(1,2) ) ) 等等,对于任意数量的 f 应用。这就是我所说的 ...重复应用 的意思。 - thor
我认为你想要我过去写的这段代码:http://hawwashsoft.proboards.com/thread/187/varargmodule - warspyking
1个回答

11

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接