我是一名Lua的新手,最近在学习有关表格的使用。从教程中我知道Lua会对数值索引和非数值索引的项进行不同的处理,所以我自己做了一些测试。今天我发现了一个有趣的现象,但是我无法解释它:
这是代码:
t = {1, 2, 3, a='a', b='b'}
print(#t)
gets
3
因为#
运算符仅计算数字索引项,所以我测试了以下代码
t = {1, 2, 3, a='a', b='b'}
print(#t)
for i = 100,200 do
t[i] = i
end
print(#t)
我明白了
3
3
直到现在,我认为Lua将那些后来添加的不连续项目视为非数值索引项目。然而,在我稍微改变代码后
t = {1, 2, 3, a='a', b='b'}
print(#t)
for i = 100,300 do
t[i] = i
end
print(#t)
我理解
3
300
我对这种现象感到困惑,有人知道原因吗?谢谢。
(这种现象可以在http://www.lua.org/cgi-bin/demo上重现)
更新:
我尝试了这段代码
t = {1, 2, 3, a='a', b='b'}
print(#t)
for i = 100,300 do
t[i] = i
print("add", i, #t)
end
for i = 100,300 do
t[i] = nil
print("del", i, #t)
end
我明白了
3
add 100 3
add 101 3
add 102 3
...
add 223 3
add 224 3
add 225 3
add 226 226
add 227 227
add 228 228
...
add 298 298
add 299 299
add 300 300
del 100 300
del 101 300
del 102 300
...
del 253 300
del 254 300
del 255 300
del 256 3
del 257 3
del 258 3
...
del 298 3
del 299 3
del 300 3
这个例子展示了Lua可以在稀疏表和密集表之间进行转换。