五分钟技术分享|Lua语言中Require的工作原理
require从哪儿加载文件?
从 package.path 拼接当前require的路径进行查找,会从输出结果中挨个访问是否存在该文件,如果有就会通过loader(加载器)加载。
1 | print(package.path) --Windows测试环境 |
将上面的?替换为文件名,就是尝试加载的文件地址,多个分号分隔代表会从多个路径进行优先级查找。
require的模块存在哪儿?
require的模块都存储在package.loaded。
1 | require "main" |
require的唯一性
观察下面代码我们定义一个main.lua文件
1 | main = {} |
运行下面的代码会得到输出:
1 | local ma1 = require "main" |
可以看到 “load file main” 并不是每次被require的时候都会执行。只有在首次执行会输出。
让require的模块执行多次
默认没有return的情况下会走一个return true,lua会自己确保当前文件中执行函数只走一次就被缓存。
在显式添加return false的情况下,才会多次require每次都刷新package.loaded缓存过的数据。
1 | main = {} |
还有另外一种方式就是将package.loaded.main设置为nil,require的时候会发现loaded中存储的main找不到了,就会再次走加载流程。
1 | main = {} |
本文标题:五分钟技术分享|Lua语言中Require的工作原理
文章作者:Keyle
发布时间:2024-04-08
最后更新:2024-08-20
原始链接:https://vrast.cn/posts/30453/
版权声明:©Keyle's Blog. 本站采用署名-非商业性使用-相同方式共享 4.0 国际进行许可