AFAIK,一旦模块被加载,lua 就会将结果缓存到 package.loaded[modName] 中。无论我们在哪里需要“模块”,这个说法都成立吗?
以下示例:
在下面的示例中,
script1
仅加载一次module.lua,因此任何其他用法仅从package.loaded中获取内容,而script2
则需要两次。在第二种情况下,我们在函数作用域内加载模块,这是否意味着 lua 不会像第一种情况那样缓存 require "module"
的结果?
模块.lua
local Table = {}
local function print_func(message):
print(message)
end
Table.print_func = print_func
return Table
脚本1.lua
local table = require "module"
local function perform()
table.print_func("PERFORM")
end
local function work()
table.print_func("WORK")
end
script2.lua
local function do()
local table = require "module"
table.print_func("DO")
end
local function work()
local table = require "module"
table.print_func("WORK")
没有什么区别,只是函数的结果会被丢弃,但是由于Lua引擎会缓存“require”的结果,当下次对同一个文件调用“require”时,缓存的值将被退回。在后一种情况下,这是一个额外的表查找,也是通常首选全局“require”的原因之一。