Open GotGimhong opened 1 year ago
你记错了,Lua本身就是只有文件末尾return table的时候才会记录在package.loaded里面
你记错了,Lua本身就是只有文件末尾return table的时候才会记录在package.loaded里面
文件末尾有 return table 的时候当然会把这个 table 记录在 package.loaded
里面。我的意思是,当文件末尾没有 return table 时,package.loaded
里面也会对应记录一个 true,表示加载过这个文件,这个是 Lua 本身的设计,具体可以看 Lua 源码 loadlib.c 里面,ll_require
函数的实现,以下是 Lua 5.4.4 的实现,在旧版本中也有这种设计。
哦,是我记错了。。。你说得对
HotReload.lua 重写了
require
函数。按照目前的实现,如果在 Lua 代码的末尾没有任何返回,那么被 require 过的 Lua 代码并不会被记录到loaded_module
和package.loaded
当中,因为这里的临时变量new_module
始终是nil
。举个例子:
如果使用重写后的
require
函数,那么每次 require 这个文件时都会重新执行一次里面的代码。但是按照 Lua 原来的require
函数的实现,require 过一次后,package.loaded["MyGlobalTable"]
会被设置成true
,之后即使重复 require,也不会重复执行文件里的代码。因此想请问一下这样实现的原因,是出于某种考虑还是单纯写错了。