lua require之“.““/“路径影响package.loaded[v] = nil卸载问题

问题背景

项目中前段时间重构,其中实现了退出游戏时游戏模块代码卸载的功能。

先说一下基础逻辑,

1 进入游戏时,将所有的游戏中用到的lua代码的路径使用一个路径表存起来。

2 退出游戏时,遍历该路径表,将所有的路径卸载。

即可达到第二次进游戏,代码重新加载,不用每次修改游戏代码都重启项目,方便调试。更重要的是多款子游戏切换时,可以卸载上一款游戏的代码内存占用。

表现排查

但是这过程中遇到一个奇怪问题。即".""/"路径差异,导致部分代码卸载不掉。

各种角度检查代码,未发现逻辑异常。最后打印卸载路径时发现,出问题的这些文件,路径中某个分隔符是"/",其他正常文件的全部统一为"." ,于是修改测试,验证确实是"/"引起的。

后经测试,只有保持路径中全是以"/"作为分隔符,或全以"."作为分隔符才可以保证package.loaded[v] = nil正确卸载代码,不可同时使用".","/"两种分隔符。另外同时使用".","/"两种分隔符加载是没有问题的。

至于问题的底层原理,暂未在网上找到令人信服的解释,留个坑。

最后,建议

最后,建议统一使用"/"来做路径分割符。

见过Lua路径空异常的同学应该知道,lua,require的默认遍历路径都是"/"形式的。最好与官方保持统一。

另外"."分隔符在操作系统层面有很多其他的用处,比如同层级相对路径,文件后缀名分隔符,等等。所以最好不要使用".",防止引起误解,特别是不要引起操作系统的误解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值