阅读背景:

谈谈lua中的table.remove()以及loop+table.remove()误区

来源:互联网 

  前几天在修复一个bug的时候发现代码中使用了泛型for+ipairs()+table.remove()删除元素,毫无疑问,这是一种错误的做法,但因为历史配置内容原因,导致这个BUG在之前一直没表现出来。lua中,在for循环中调用函数ipairs时,ipairs会返回3个值,迭代函数、不可变状态表、初始控制变量0,for的每次调用,都会把状态表和控制变量传入迭代函数,调用迭代函数,把控制变量+1,再获取状态表中相应元素,并把两者返回,直至遇到nil结束;而函数table.remove除了删除、返回指定序列上的元素,还会把后面的元素往前移动。故而知,当表中相邻的两个元素都需要删除的时候,就会发生删除不干净的情况。表是肯定需要遍历一遍的,现在问题就是,该以怎样一种方式去遍历表,达到正确删除元素的目的。首先,如果是无序表,直接把对应位置上的元素置nil;如果是有序表,比较常用的方法有以下3种:  前几天在修复一个bug的时候发现代码中使用了泛型for+ipairs()+table.rem




你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: