在lua 5.0 中require:
require的另一个功能是避免重复加载同一个文件两次。Lua保留一张所有已经加载的文件的列表(使用table保存)。如果一个加载的文件在表中存在require简单的返回;表中保留加载的文件的虚名,而不是实文件名。所以如果你使用不同的虚文件名require同一个文件两次,将会加载两次该文件。比如require "foo"和require "foo.lua",路径为"?;?.lua"将会加载foo.lua两次。我们也可以通过全局变量_LOADED访问文件名列表,这样我们就可以判断文件是否被加载过;同样我们也可以使用一点小技巧让require加载一个文件两次。比如,require "foo"之后_LOADED["foo"]将不为nil,我们可以将其赋值为nil,require "foo.lua"将会再次加载该文件。
在lua5.1中加载的模块方面有所改进,貌似不存在全局变量_LOADED,而是放入package.loaded[模块名] 中,加载成功后判断对应package.loaded[模块名]为True,做lua的热加载方法可以将require的每个模块require进来,然后再将每个模块在package.loaded中设置为false,加载的时候只需要加载主文件就可以了。