2

可能重复:
为什么将全局 Lua 函数设为本地?

在社区的许多 lua 脚本中,我看到类似向脚本添加模块的内容:

local module = require("module")

但是根据lua-manual,这不是加载模块的方式。模块本身在里面有它们的模块名称,所以

require("module")

使用这样的模块就足够了:module.myfunction()。具有本地定义的第一个示例只是将“true”写入模块变量 - 表示模块已成功加载。

奇怪的是,我在网络上到处都能看到这种加载“local module = require("module")”。由于这个错误,来自 lua-community 的大多数脚本我都无法正常工作。我也想知道为什么我还没有在网上发现任何关于此的问题。

接下来是,实际上加载模块有时也会导致奇怪的错误。例如:我有一个脚本

require("purexml.lua")

比我得到这个错误:

no field package.preload['purexml.lua']
no file './purexml/lua.lua'
no file '/usr/local/share/lua/5.1/purexml/lua.lua'
no file '/usr/local/share/lua/5.1/purexml/lua/init.lua'
no file '/usr/local/lib/lua/5.1/purexml/lua.lua'
no file '/usr/local/lib/lua/5.1/purexml/lua/init.lua'
no file './purexml/lua.so'
no file '/usr/local/lib/lua/5.1/purexml/lua.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
no file './purexml.so'
no file '/usr/local/lib/lua/5.1/purexml.so'
no file '/usr/local/lib/lua/5.1/loadall.so'

但这样做很好:

require("purexml")

我在这里错过了一些非常明显的东西吗?顺便说一句,我使用 Lua 5.1.4...

4

2 回答 2

6

在 Lua 5.2 中,表现良好的模块不再像在 Lua 5.1 中那样导出全局变量。

除了局部变量提供的速度提升外,local module = require "module" 还应使用 using 以兼容最新的 Lua 版本。

于 2012-09-29T14:47:21.317 回答
4

local module = require("module")除了默认的全局变量外,还创建一个包含模块的局部变量(当然,局部变量会影响全局变量)。在 Lua 中,Locals 的访问速度要快得多,因此性能很可能是使用它的原因。

而且你得到的错误很明显,你不能在加载模块时添加文件扩展名。

于 2012-09-29T14:20:07.670 回答