当前位置: 首页 > news >正文

lua table.remove引发的偶现bug

故事背景,两只宠物育种的时候要从背包删除,放入育种栏。育种完成再放回背包。现在育种完成背包多了一只。调试发现是删除的时候少删除了一只。

if source_list_a == take_list thentable.remove(take_list, index_a)
elsetable.remove(ware_list, index_a)
end
if source_list_b == take_list thentable.remove(take_list, index_b)
elsetable.remove(ware_list, index_b)
end

如果a在b的前面,那么b remove会失败,remove后b的index_b其实已经改变了.

其实这个bug是ai写的,下面的代码也是ai改的

-- 先移除索引较大的宠物,再移除索引较小的,避免索引变化问题
local remove_indices = {}
if source_list_a == take_list thentable.insert(remove_indices, {list = take_list, index = index_a})
elsetable.insert(remove_indices, {list = ware_list, index = index_a})
end
if source_list_b == take_list thentable.insert(remove_indices, {list = take_list, index = index_b})
elsetable.insert(remove_indices, {list = ware_list, index = index_b})
end
-- 按索引从大到小排序,先移除索引大的
table.sort(remove_indices, function(a, b)return a.index > b.index
end)
-- 按排序后的顺序移除
for _, remove_info in ipairs(remove_indices) dotable.remove(remove_info.list, remove_info.index)
end

http://www.dtcms.com/a/550335.html

相关文章:

  • 常熟做网站价格wordpress 改变字体
  • 做水果网站弄个什么名字钓鱼平台设计
  • C++ STL:string类(3)|operations|string类模拟实现|附源码
  • 微网站的建设模板有哪些如何制作网页表格
  • 海外短剧APP时区适配:全球内容更新时间智能调度与用户通知策略
  • 射频T/R组件?接收数字式T/R组件与数字式T/R组件?
  • 软考 系统架构设计师系列知识点之杂项集萃(183)
  • 黑龙江生产建设兵团知识网站网站认证打款怎么做分录
  • 凡科网站登录入wordpress入门教程视频教程
  • 【双机位A卷】华为OD笔试之【回溯】双机位A-找到它【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
  • wordpress结婚模板百度seo详解
  • win2003怎么做网站做装修公司的网站
  • 开发一款连接带有GEM/SECS协议软件的设备(五)
  • 大连市营商环境建设局网站太原建站seo
  • 串口调试数据(2)---之MQTT/WS透传及配套相关服务端介绍
  • 数学:裴蜀定理(贝祖定理)
  • 山东省建设监理协会官方网站书画展示网站模板
  • 做网站的工作记录网上书店网站前端搜索条怎么做
  • AI 在法律咨询服务中的革命性变化:技术赋能与生态重构
  • 【ROS2】行为树 BehaviorTree(十一):端口函数详解、异常处理
  • 电力电子技术 第八章——DC/DC变换器
  • 做软件界面一般用什么软件衡阳专业seo公司
  • 全检垫圈垫片 视觉检测设备 在线自动化瑕疵检测机
  • 网站建设方案书的内容管理制度网站建设百科
  • C++ Vector嵌套完全指南:从基础到高阶应用
  • 建设三类人员报考网站做特产的网站开张怎么宣传
  • 【代码随想录算法训练营——Day52】图论——101.孤岛的总面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿
  • 设计最好的网站云企网站
  • 3网站建设wordpress设置版权信息
  • Vue + TSX 中使用 class 报错 解决方法