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

是否可以将元组作为Lua函数的参数传递?

例如,我有一个返回多个值的函数

function f(a,b)  return b,a end

我希望可以重复应用这个函数 f,因此我可以这样写:

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

但如果我需要将这个初始元组 (1,2) 存储为变量 init 呢?

f (f ... f(init))

是否支持这种操作?

根据这个回答,似乎Python中使用星号操作符 * 就可以做到。

点赞
用户734069
用户734069

Lua不支持“元组”。

当函数返回多个值时,它实际上返回_多个值_。它们不会组合成某个数据结构;它们是单独的值。如果你想将多个返回值存储在单个数据结构中,你必须实际这样做。

Lua 5.2有table.pack函数,你可以用它将多个返回值存储在一个table中。但是它会以一种可以稍后分解的方式进行存储:

local values = table.pack(f(1, 2))

f(table.unpack(values, values.n))

unpack在Lua 5.1中存在,但pack不在。你可以很容易地模拟它:

function pack(...)
    return {n = select("#", ...), ...}
end
2017-02-21 18:26:37