一个返回多个结果的函数将会分别返回这些结果,而不是作为一张表格。
有关多返回值的 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()
print(t[1], t[2], t[3], t[4])
这种方法可以让您选择输出结果的位置,如果您想忽略某个位置,只需使用以下命令:
t[1], _, t[3], t[4] = func1()
t = table.pack(func1())
而不是t={func1()}
,因为这样你可以使用t.n
查询表格中元素的数量(如果有"空洞",#t
无法正常工作)。注意不能改变原意。 - Henri Menketable.pack
变体,我仍然觉得如果你期望内部的nil
值,它可能会产生混淆的结果。在我添加到答案中的内容中,table.pack
并不保留结果。如果第二个结果是nil
,那么使用table.pack
获取的表格具有一个不是nil
但实际上是结果 3 值的t [2]
,现在t [3]
是结果 4 的值。如果多个结果可以返回nil
,则table.pack
使解释结果变得不可能。 - Nifim