【问题标题】:how to get multiple values returned into table? without returning a table [lua]如何将多个值返回到表中?不返回表 [lua]
【发布时间】:2019-02-27 23:39:55
【问题描述】:

示例

function func1()
 return 1,1,1,1
end

table = {}
table = func1()

print(table)

我不想做

 function func1()
  return {1,1,1,1}
 end

因为我正在使用的功能已经定义,我无法修改它。

想要的输出是

1 1 1 1

但事实并非如此;它只返回函数返回的第一个值。

我怎样才能做到这一点?抱歉格式错误;这是我第一次提问。

另外,我很确定该表等于一个数组?也很抱歉。

编辑我也不知道参数的数量。

【问题讨论】:

    标签: lua


    【解决方案1】:

    返回多个结果的函数将分别返回它们,而不是作为表格返回。

    多个结果的 Lua 资源:https://www.lua.org/pil/5.1.html

    你可以像这样做你想做的事:

    t = {func1()} -- wrapping the output of the function into a table
    print(t[1], t[2], t[3], t[4])
    

    这个方法总是会得到所有的输出值。


    这个方法也可以使用table.pack:

    t = table.pack(func1())
    print(t[1], t[2], t[3], t[4])
    

    通过使用table.pack,您可以丢弃 nil 结果。这有助于使用长度运算符# 保留对结果数量的简单检查;然而,它的代价是不再保留结果“顺序”。

    为了进一步解释,如果func1 使用第一种方法返回1, nil, 1, 1,您会收到一个表,其中t[2] == nil。使用table.pack 变体,您将获得t[2] == 1


    您也可以这样做:

    function func1()
     return 1,1,1,1
    end
    
    t = {}
    t[1], t[2], t[3], t[4] = func1() -- assigning each output of the function to a variable individually 
    
    print(t[1], t[2], t[3], t[4])
    

    这种方法可以让你选择输出去哪里,或者如果你想忽略一个你可以简单地做:

     t[1], _, t[3], t[4] = func1() -- skip the second value 
    

    【讨论】:

    • 我推荐t = table.pack(func1())而不是t = {func1()},因为这样你就可以用t.n查询表中的元素数量(如果有“洞”,#t将不起作用)。
    • @HenriMenke 在答案中添加了 table.pack 变体,如果您确实期望内部 nil 值,我仍然觉得这可能是一个令人困惑的结果。在我添加到我的答案中时,table.pack 不会坚持结果。如果第二个结果是nil,那么使用table.pack,你得到的表有一个t[2],它不是nil,而是结果3的值,现在t[3]是结果4的值。如果超过 1 个结果可以返回 niltable.pack 使得无法解释结果
    猜你喜欢
    • 2016-11-11
    • 2011-11-20
    • 2011-04-27
    • 2013-12-09
    • 2018-11-24
    • 2016-09-27
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    相关资源
    最近更新 更多