We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
HotReload.lua 重写了 require 函数。按照目前的实现,如果在 Lua 代码的末尾没有任何返回,那么被 require 过的 Lua 代码并不会被记录到 loaded_module 和 package.loaded 当中,因为这里的临时变量 new_module 始终是 nil。
require
loaded_module
package.loaded
new_module
nil
举个例子:
-- Script/MyGlobalTable.lua MyGlobalTable = MyGlobalTable or {} -- ...
如果使用重写后的 require 函数,那么每次 require 这个文件时都会重新执行一次里面的代码。但是按照 Lua 原来的 require 函数的实现,require 过一次后,package.loaded["MyGlobalTable"] 会被设置成 true,之后即使重复 require,也不会重复执行文件里的代码。
package.loaded["MyGlobalTable"]
true
因此想请问一下这样实现的原因,是出于某种考虑还是单纯写错了。
The text was updated successfully, but these errors were encountered:
你记错了,Lua本身就是只有文件末尾return table的时候才会记录在package.loaded里面
Sorry, something went wrong.
文件末尾有 return table 的时候当然会把这个 table 记录在 package.loaded 里面。我的意思是,当文件末尾没有 return table 时,package.loaded 里面也会对应记录一个 true,表示加载过这个文件,这个是 Lua 本身的设计,具体可以看 Lua 源码 loadlib.c 里面,ll_require 函数的实现,以下是 Lua 5.4.4 的实现,在旧版本中也有这种设计。
ll_require
哦,是我记错了。。。你说得对
No branches or pull requests
HotReload.lua 重写了
![UnLua反馈](https://private-user-images.githubusercontent.com/16437644/273430311-80fa3e10-b176-4c1a-b891-38b7b168db66.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjEyMjU3MTgsIm5iZiI6MTcyMTIyNTQxOCwicGF0aCI6Ii8xNjQzNzY0NC8yNzM0MzAzMTEtODBmYTNlMTAtYjE3Ni00YzFhLWI4OTEtMzhiN2IxNjhkYjY2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzE3VDE0MTAxOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFhYmM4ZjI5Njc2OTU3MTVjN2YwMTY4MjdhOTZjMTZmYzU0MDIxMGNlZmEyODUyYWI3Mzk1YzdjN2QzZTA1YzAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.mSvDJoHTJyi8Wffv1phsVCHlKan232J_ubte-abImkQ)
require
函数。按照目前的实现,如果在 Lua 代码的末尾没有任何返回,那么被 require 过的 Lua 代码并不会被记录到loaded_module
和package.loaded
当中,因为这里的临时变量new_module
始终是nil
。举个例子:
如果使用重写后的
require
函数,那么每次 require 这个文件时都会重新执行一次里面的代码。但是按照 Lua 原来的require
函数的实现,require 过一次后,package.loaded["MyGlobalTable"]
会被设置成true
,之后即使重复 require,也不会重复执行文件里的代码。因此想请问一下这样实现的原因,是出于某种考虑还是单纯写错了。
The text was updated successfully, but these errors were encountered: