为什么 Lua 中的 package.loaded 不能缓存由模块返回的全局表?

从 Lua 5.1 参考手册中可以得知:

require 找到加载器后,使用模块名 modname 调用加载器。如果加载器返回值,则 require 将返回值赋值给 package.loaded[modname]。如果加载器没有返回值,也没有将值分配给 package.loaded[modname],则 require 将该条目分配为 true。在任何情况下,require 返回的是 package.loaded[modname] 的最终值。

据我观察,当使用 require 并成功加载模块时,package.loaded[modname] 必须有值,无论是 true 还是表,取决于加载器函数的返回值。

以下是我的测试截图:

enter image description here

我的 package.loaded["test"] 在哪里?但是,当我在 test.lua 文件中更改一行时:

enter image description here

这是我的 Lua 解释器:

ZeroBraneStudioEduPack-1.40-win32/Project/Lua Interperter/Lua

抱歉我的英语不好。

附注: 上面的截图可以通过以下链接查看完整分辨率:12

点赞
用户1442917
用户1442917

ZeroBrane Studio 通过几个 debugger.* 设置 来限制在监视面板中检索和显示的内容大小。在您的情况下,引用 _G 会返回一个大型负载,这会推出一些其他内容(它只是将全局变量已列在 _G 中的不同内容推出,这就是为什么您会看到稍微不同的结果)。

尝试将以下代码添加为您的脚本的第二行:package.loaded._G = nil,然后您应该可以看到更多的元素,并且两种情况之间的结果将保持一致。

2017-02-01 19:37:41