我有以下代码:
local ta = { nil, nil, nil, 1, a = 2 }
local tb = { [4] = 1, a = 2 }
for i = 1, #ta do
print('ta['..i..']= ', ta[i])
end
for i = 1, #tb do
print('tb['..i..']= ', tb[i])
end
Run Code Online (Sandbox Code Playgroud)
并获得以下输出:
ta[1]= nil
ta[2]= nil
ta[3]= nil
ta[4]= 1
Run Code Online (Sandbox Code Playgroud)
我假设两个表都应该相同.但它并不完全.
我尝试使用空构造函数创建表,并逐个初始化元素,包括开头的nils.但是与表tb得到了相同的结果.
有什么区别?我可以手动管理吗?
虽然WB大多是正确的,因为长度运算符对于带孔的数组并不是非常一致,但它也不是未定义的.
表的长度在Lua手册中定义为"任何整数索引n,使得t[n]不是nil且t[n+1]为零;此外,如果t[1]是nil,n则可以为零".
这意味着长度{"a", nil, "b", nil, "c"}可以是1,3或5.因此,虽然长度运算符将不再为您提供非常有用和特定的结果,但它也不会给您带来垃圾.