这不是一个问题。只是 Lua 是惊人的。
t = {1, 2, 3}
print(table.unpack(t)) -->1 2 3
print(0, table.unpack(t)) -->0 1 2 3
print(table.unpack(t), 4) -->1 4
什么?
问题归结为给变量赋值,让我简化一下问题:
function ret_1_2_3()
return 1, 2, 3
end
f, g, h, i = 0, ret_1_2_3()
print(f,g,h,i) --> 0 1 2 3
f, g, h, i = ret_1_2_3(), 4
print(f,g,h,i) --> 1 4 nil nil
使用“...”时不必为变量命名,但它遵循相同的规则并table.unpack
返回多个值。在Lua 5.2 Reference Manual的第 3.4 点下,它说:
如果将表达式用作表达式列表的最后(或唯一)元素,则不进行任何调整(除非将表达式括在括号中)。在所有其他情况下,Lua 将结果列表调整为一个元素,要么丢弃除第一个元素之外的所有值,要么在没有值的情况下添加一个 nil。
我确实花了一段时间才弄清楚,这是你在那里问的一个好问题。