如何将多个返回值放入表中?而不必返回一个表 [Lua]

3

example

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
但实际上,这并不是实际返回的结果;它只返回了函数返回的第一个值。
如何使这种情况成为可能?对于格式不佳的问题我很抱歉,这是我第一次提问。
此外,我相当确定表格等同于数组?所以也很抱歉。
编辑:我也不知道参数的数量。
1个回答

7

一个返回多个结果的函数将会分别返回这些结果,而不是作为一张表格。

有关多返回值的 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函数,您可以丢弃空值的结果。这样做有助于通过长度运算符#保留对结果数量的简单检查;但是它的代价是不再保留结果的“顺序”。
更进一步地解释一下,如果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 

4
我建议使用 t = table.pack(func1()) 而不是 t={func1()},因为这样你可以使用 t.n 查询表格中元素的数量(如果有"空洞",#t 无法正常工作)。注意不能改变原意。 - Henri Menke
@HenriMenke 在答案中增加了 table.pack 变体,我仍然觉得如果你期望内部的 nil 值,它可能会产生混淆的结果。在我添加到答案中的内容中,table.pack 并不保留结果。如果第二个结果是 nil ,那么使用 table.pack 获取的表格具有一个不是 nil 但实际上是结果 3 值的 t [2],现在 t [3] 是结果 4 的值。如果多个结果可以返回 nil ,则 table.pack 使解释结果变得不可能。 - Nifim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接