function test() return 1, 2 end
function foo()
return test(), 3
end
预期结果:1, 2, 3
实际结果:1, 3
LuaJIT 2.1.0
答案 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