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

时间:2017-02-21 17:24:20

标签: function lua tuples

有没有办法将元组作为Lua函数的参数传递?

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

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

我希望重复应用此函数f,所以我可以写:

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

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

f (f ... f(init))

是否有支持?

根据this answer,似乎python使用splat运算符*

1 个答案:

答案 0 :(得分:3)

Lua没有"元组"。

当函数返回多个值时,它返回多个值。它们没有组合成一些数据结构;他们分开了价值观。如果要在单个数据结构中存储多个返回值,则必须实际执行此操作。

Lua 5.2具有table.pack函数,您可以使用该函数在表中存储多个返回值。但它是这样做的,你可以在以后分解它们:

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

f(table.unpack(values, values.n))
Lua 5.1中存在

unpack,但pack没有。你可以很容易地模仿它:

function pack(...)
    return {n = select("#", ...), ...}
end