Lua require 在不同文件中多次调用 mpack 失败
2020-5-28 16:13:17
收藏:0
阅读:116
评论:1
给定以下完整的 Lua 文件:
-- test/file1_spec.lua
local mpack = require('mpack')
print(mpack)
如果使用 busted 执行该文件,则可以正常工作。
如果将文件更新为在两个地方都加载 mpack:
-- test/file1_spec.lua
local mpack = require('mpack')
print(mpack)
local mpack2 = require('mpack')
print(mpack2)
它仍然可以正常工作。但是如果我添加第二个文件(除了上面的文件之外):
-- test/file2_spec.lua
local mpack = require('mpack')
print(mpack)
那么在此第二个文件中加载 mpack 会导致以下错误:
test/file2_spec.lua:1: attempt to index a mpack.NIL value
require 如何工作?如何在不同的 Lua 文件中加载 mpack?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

mpack模块本身存在问题,由于某些原因无法加载两次:-- demo.lua require('mpack') -- 从缓存中移除已加载的包,否则包将不会重新加载 package.loaded['mpack'] = nil require('mpack')$ lua demo.lua lua: attempt to index a mpack.NIL valuebusted也会出现这种情况,因为busted在测试之间刷新包缓存:因此,您有几个选项:
使用
busted --no-auto-insulate标志。我不建议这样做,因为它完全禁用了隔离。使用
busted -e 'require("mpack")'。使用-e参数传递的表达式将在任何测试之前执行,因此隔离机制不会删除已缓存的包。使用
expose块:``` -- spec/__init_spec.lua -- 文件名以下划线开头,以确保在任何其他 spec 文件之前处理它。我不知道如何以正确的方式做到这一点(如果可能的话)。
expose('preload mpack module', function() require('mpack') end)
```
请查看https://olivinelabs.com/busted/#defining-tests,“描述:隔离和公开块”部分了解详情。
我稍后会检查
mpack源代码,也许我可以解决这个问题。更新:Lua 参考手册中关于
package.loaded的描述:https://www.lua.org/manual/5.3/manual.html#pdf-package.loaded