【问题标题】:How to pass a tuple as arguments to a Lua function?如何将元组作为参数传递给 Lua 函数?
【发布时间】:2017-07-11 11:14:10
【问题描述】:

有没有办法将元组作为 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 运算符*。

【问题讨论】:

  • "所以我可以写" 这不是有效的 Lua。 f ... f 不是合法的 Lua 语法。所以我不明白你想要什么。
  • This page 可以帮助你。
  • @NicolBolas 你可以写例如f( f (1,2)), f (f ( f(1,2) ) ) 等,适用于f 的任意数量的应用程序。这就是我对 ... 和 repeatedly apply 的意思。
  • 我想你想要我过去写的这段代码:hawwashsoft.proboards.com/thread/187/varargmodule

标签: function lua tuples


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-11-06
    • 2012-05-24
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多