Lua中有趣的行为'......'

时间:2015-06-29 07:40:02

标签: lua lua-5.2

这不是问题。 Just 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

什么?

1 个答案:

答案 0 :(得分: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。

我确实花了一些时间才弄明白,这是你问过的一个很好的问题。