Lua无法解压缩表,从两个nil分配元素开始

时间:2015-09-23 00:59:57

标签: lua lua-table unpack

我在Lua中尝试了以下代码。前四个案例运作良好,但最后两个案例失败。我在这两个结果中得到的结果为零。问题是什么?

v = {nil, 10, nil}
a, b, c = unpack(v)
-- Output: a, b, c =  nil 10  nil
print('a, b, c = ', a, b, c)

v = {nil, nil, 10}
a, b, c = unpack(v)
-- Output: a, b, c =  nil nil 10
print('a, b, c = ', a, b, c)

v = {}
v[2] = 10
a, b, c = unpack(v)
-- Output: a, b, c =  nil 10  nil 
print('a, b, c = ', a, b, c)

v = {}
v[1] = nil
v[2] = 10
v[3] = nil
a, b, c = unpack(v)
-- Output: a, b, c =  nil 10  nil
print('a, b, c = ', a, b, c)

v = {}
v[3] = 10
a, b, c = unpack(v)
-- Output: a, b, c =  nil nil nil
print('a, b, c = ', a, b, c)

v = {}
v[1] = nil
v[2] = nil
v[3] = 10
a, b, c = unpack(v)
-- Output: a, b, c =  nil nil nil
print('a, b, c = ', a, b, c)

1 个答案:

答案 0 :(得分:3)

将表格用作数组时,所有元素的值都必须与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?