有趣的行为“...”在Lua中

没问题。 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

什么?

点赞
用户4173441
用户4173441

问题归结为对变量进行赋值,让我简化一下这个问题:

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参考手册的3.4点下,它说:

如果表达式用作表达式列表的最后一个(或唯一一个)元素,则不调整列表(除非表达式括在括号中)。 在所有其他情况下,Lua将结果列表调整为一个元素,要么丢弃除第一个以外的所有值,要么添加一个单独的nil(如果没有值)。

我花了一些时间来弄清楚这件事,这是你提出的一个好问题。

2015-12-22 09:39:00