Lua4.0中getn陷阱
Lua4.0中getn潜规则
• 使用t[n] = nil方式删除元素会导致意外结果
t = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
t[1] = nil;
print(getn(t)); -- 10
t = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
t[5] = nil;
print(getn(t)); -- 10
t = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
t[10] = nil;
print(getn(t)); -- 9
• 混用tremove和[]会导致getn失效
t = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
tremove(t, 1);
t[10] = 11;
print(getn(t)); -- 9
• 混用tinsert和[]会导致getn失效
t = {2, 3, 4, 5, 6, 7, 8, 9, 10};
tinsert(t, 1, 1);
t[11] = 11;
print(getn(t)); -- 10
• 非连续下标的table不能使用getn取得元素个数
t = {}; t[2] = 1; t[3] = 2; print(getn(t)); -- 3 t = { aaa = 1, bbb = 2, }; print(getn(t)); -- 0
Lua4.0中getn正确使用规则
遵循以下两条规则来使用Lua 4.0中的顺序表可以保证getn的操作不会失效:
• 使用tinsert和tremove添加和删除元素;
• 使用[]操作修改元素,但是不能置为nil;
浙公网安备 33010602011771号