从函数返回一个元组并包含另一个值

时间:2018-03-08 02:02:57

标签: lua luajit

function test() return 1, 2 end
function foo()
  return test(), 3
end

预期结果:1, 2, 3

实际结果:1, 3

LuaJIT 2.1.0

2 个答案:

答案 0 :(得分:3)

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

local a, b = 1, 2

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

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

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

解决此问题的另一种方法是将函数调用放在最后

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

对于逆变量顺序,这看起来有点奇怪。

答案 1 :(得分: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