【问题标题】:Return a tuple from a function and include another value从函数返回一个元组并包含另一个值
【发布时间】:2018-03-08 02:02:57
【问题描述】:
function test() return 1, 2 end
function foo()
  return test(), 3
end

预期结果:1, 2, 3

实际结果:1, 3

LuaJIT 2.1.0

【问题讨论】:

  • 很高兴您想提供一个问题的解决方案,但我不知道任何人会通过搜索找到它。
  • @Piglet 请建议一个更好的标题。另外,直到在这里发布后我才找到解决方案。
  • 我不知道更好的标题。否则我会改变它。我能想到的任何东西都是没有人会搜索的。我不知道。有时我觉得那些甚至懒得至少阅读语言手册的表达式部分的人不应该知道这些事情:)

标签: lua luajit


【解决方案1】:

@aleclarson 回答这个问题是为了解决这个问题,我想详细说明为什么你的方法不起作用。在 lua 中,可以有多个返回值,也可以有多个赋值。如果你写

local a, b = 1, 2

这很好用。如果您省略任何请求的值,您将得到nil(这也发生在函数的参数中)。现在函数可以返回多个值,这些值可以与上述语句中的变量混合。这看起来像你的代码:

local a, b, c = f(), 3

这实际上将 f() 的结果截断为 one 结果,将 3 作为 second 值并使用 nil 进行调整,然后传递给c。 请参阅lua manual

解决这个问题的另一种方法是将函数调用放在末尾​​em>:

local c, a, b = 3, f()

诚然,倒转变量顺序看起来有点奇怪。

【讨论】:

    【解决方案2】:
    function foo()
      local a, b = test()
      return a, b, 3
    end
    

    如果你不知道有多少返回值:

    function foo()
      local tuple = { test() }
      table.insert(tuple, 3)
      return unpack(tuple)
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多