2015-12-12 47 views

回答

9

在Lua标准库中没有import函数。不适用于5.1,5.2或5.3。也许你正在考虑提供这种功能的其他代码;你必须向该功能的提供者询问它。

require不加载.lua文件;它加载模块。究竟是什么require做的是defined by package.loaders在5.1或package.searchers在5.2/3。一个特定的模块可能被实现为.lua文件,但它也可能是.dll/.so。或者,如果模块是应用程序内部的,则它可能是在编译时间表中查找的名称。或者它可以从互联网上下载一些东西。或者任何东西,根据什么loaders/searchers做。

默认loaders/searchers可以加载.lua文件,但它们只能通过基于Lua搜索路径的目录进行搜索。此路径由环境变量初始化,但用户可以覆盖它。

模块命名约定也有一些子模块的概念。你几乎从不把“.lua”放在模块名称中。 require加载模块,而不是文件;加载的任何文件都是加载模块的副作用。

哦,和require缓存加载模块。使用相同的模块名称再次调用它将简单地返回先前加载的模块。如果你想重新加载一个模块......你不能。似乎没有办法强制模块重新加载。

loadfile从磁盘加载文件并将其编译为Lua块。它使用C标准库工具来进行文件加载,因此路径的工作与Lua编译的C库实现一致。它返回加载的块但不执行它。

+3

我会补充说,只需要加载一个模块一次,然后再调用时再次请求相同的参数,它会返回模块的返回值(例如来自lua文件的返回值)或true。 loadfile改为总是运行该文件。 – Rochet2

+2

另外,'require'运行模块一次。 'loadfile'不运行该文件。 – lhf

相关问题