2

这不是一个问题。只是 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

什么?

4

1 回答 1

2

问题归结为给变量赋值,让我简化一下问题:

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。

我确实花了一段时间才弄清楚,这是你在那里问的一个好问题。

于 2015-12-22T09:39:00.310 回答