Lua 无法逐个对一个以两个 nil 赋值元素开头的表进行解包。

我在 Lua 中尝试以下代码。前四个情况均工作正常,但最后两个失败了。在这两个情况下,我得到了 nil 作为结果。问题在哪里?

点赞
用户4447998
用户4447998

当将表格用作数组时,所有元素都必须具有不同于 nil 的值。

将键的值设置为 nil 的作用实际上是从表格中删除该键。但是在数组中,必须设置从 1 到该数组长度的所有整数键。不允许留有“空洞”。因此,在_所有情况_中的行为都是未指定的。

您可以通过打印表格中的所有键/值对来进行验证:

t = {0, nil, 2, 3}

print("pairs:")
for k, v in pairs(t) do
    print("["..k.."]", v)
end

请注意,ipairs 中断了,因为它停在第一个 nil 元素上。

print("ipairs:")
for k, v in ipairs(t) do
    print("["..k.."]", v)
end

在此处的答案中描述了您的情况的解决方法:Lua unpack bug?

2015-09-23 01:28:41