我是新来的Lua,和我正在学习表的使用这些天。 从教程我知道Lua中把数字索引项和非数字索引的项目不同,所以我做了一些测试自己,今天我发现一个有趣的现象,我无法解释它:
代码
t = {1, 2, 3, a='a', b='b'}
print(#t)
得到
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中转换疏与密之间的表。