Lua can';t解包一个表从两个赋值为零的元素开始

Lua can';t解包一个表从两个赋值为零的元素开始,lua,lua-table,unpack,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,

我在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)

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

您案例中的解决方法在这里的回答中进行了描述:

这就是为什么手册没有使用术语“数组”。它将表描述为有“序列”或没有序列(长度)和IPAIR在序列上运行良好。(#在非序列上甚至不是确定性的。)