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;