【问题标题】:Returning multiple values from functions in lua从lua中的函数返回多个值
【发布时间】:2012-09-30 05:05:41
【问题描述】:

我正在试验以下 lua 代码:

function test() return 1, 2 end
function test2() return test() end
function test3() return test(), 3 end

print(test()) -- prints 1 2
print(test2()) -- prints 1 2
print(test3()) -- prints 1 3

我希望 test3 返回 1、2、3

实现这一目标的最佳方法是什么?

【问题讨论】:

  • 阅读有关 Lua 中多个返回值的一些信息:lua.org/manual/5.2/manual.html#3.4
  • 这个链接将带你到 Lua-wiki 页面,准确地解释你的问题。 lua.org/pil/5.1.html Lua 被编程为只返回 test() 的第一个值,如果它与另一个值一起返回。

标签: lua


【解决方案1】:

如果您不确定某个函数可能返回多少值,您可以这样做。

function test() return 1, 2 end
function test2() return test() end
function test3()
    local values = {test2()}
    table.insert(values, 3)
    return unpack(values)
end


print(test3())

这个输出:

1   2   3

【讨论】:

【解决方案2】:
...
function test3()
    local var1, var2 = test()
    return var1, var2, 3
end

print(test3())

【讨论】:

  • 在这种情况下,最好使用表格。使用未知数量的返回值将很快变得非常非常烦人。如果你使用一个表,你可以简单地在函数外部解压它:print(table.unpack(testN()),其中testN返回一些未知数量的返回值,将打印所有的返回值!
  • 您不应该在返回 var1, var2, 3 处删除 end 吗?它会产生语法错误
【解决方案3】:

我还发现,使用列表末尾的函数调用,返回值不会被截断。如果参数的顺序无关紧要,这很好。

function test() return 1, 2 end
function test2() return test() end
function test3() return 3, test() end

print(test()) -- prints 1 2
print(test2()) -- prints 1 2
print(test3()) -- prints 3 1 2

【讨论】:

    猜你喜欢
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 2014-06-23
    • 2013-09-02
    • 2018-11-24
    • 2021-12-13
    相关资源
    最近更新 更多