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

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

期望结果:1, 2, 3

实际结果:1, 3

LuaJIT 2.1.0

点赞
用户2228559
用户2228559
# Lua 函数返回多个值

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

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


假设函数 `test()` 返回两个值,则 `foo()` 函数会获取到这两个值,并在返回值列表末尾添加一个值 3。
2018-03-08 02:04:54
用户3197530
用户3197530

@aleclarson 在回答这个问题时为了解决它,我想详细说明为什么你的方法行不通。在 Lua 中,多个返回值和多个赋值都是可能的。如果你写

local a, b = 1, 2

就能正常运行。如果你省略请求的任何值,你会得到 nil(这在函数参数中也会发生)。现在函数可以返回多个值,这些值可以与语句中的变量混合使用。这看起来像你的代码:

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

这实际上截断了 f() 的结果,只返回一个结果,将 3 作为第二个值并调整与 nil 传递给 c。这个可以在 Lua 手册 上找到。

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

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

这看起来有点奇怪,但颠倒变量的顺序就可以了。

2018-03-08 07:55:12