lua优化重复导入吗?

时间:2013-11-27 12:10:08

标签: import lua

在简单模型中,我有3个文件:

base-module.lua
module-one.lua
module-two.lua

这是我的导入连接:

module-two.lua < --|
     ^             |
     |             |
     |             |  
module-one.lua     |
     ^             |
     |             |
     |             |
base-module.lua ----

module-one.lua导入base-module.lua等等...... 当我从base-module.lua删除module-two.lua导入时,我会看到base-module.lua中的所有函数和变量,但我的导入并不具有创造性。例如,lua是否优化了双重导入,例如pytho?

2 个答案:

答案 0 :(得分:6)

是的,Lua确实。

正如section 5.3require上的手册所说:

  

加载给定的模块。该功能从查看开始   package.loaded表来确定modname是否已经加载。   如果是,则require返回存储的值   package.loaded [的modname]。

答案 1 :(得分:4)

简短的回答,是的。

Long answer

  

require(modname)

     

加载给定的模块。该功能从查看开始   package.loaded表来确定modname是否已经加载。   如果是,则require返回存储的值   package.loaded [的modname]。否则,它会尝试找到一个加载器   模块。

     

要查找加载程序,require由package.loaders数组指导。通过   更改此数组,我们可以更改查找模块的方式。该   以下说明基于默认配置   package.loaders。

     

首先要求查询package.preload [modname]。如果它有一个值,   这个值(应该是一个函数)是加载器。除此以外   要求使用存储的路径搜索Lua加载程序   package.path。如果这也失败了,它会使用。搜索C loader   存储在package.cpath中的路径。如果这也失败了,它会尝试一个   一体化加载器(参见package.loaders)。

     

找到加载程序后,需要使用单个程序调用加载程序   参数,modname。如果加载器返回任何值,则需要分配   返回值为package.loaded [modname]。如果加载器返回   没有值,也没有为package.loaded [modname]赋值,   然后要求为此条目指定true。无论如何,要求退货   package.loaded [modname]的最终值。

     

如果加载或运行模块有任何错误,或者不能   找到模块的任何加载器,然后要求信号出错。