在社区的许多lua脚本中,我看到类似于向脚本添加模块的内容:
local module = require("module")
但根据lua-manual,这不是加载模块的方法。模块本身内部有模块名称,所以
require("module")
就足以使用这样的模块:module.myfunction()。第一个带有local-definition的例子只是将“true”写入module-var - 表示模块已成功加载。
关键是,我看到这种加载“本地模块= require(”模块“)”在网络的任何地方。来自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 ......
答案 0 :(得分:6)
在Lua 5.2中,表现良好的模块不再导出全局变量,就像在Lua 5.1中那样。
除了本地变量提供的速度提升之外,还应使用local module = require "module"
来与最新的Lua版本兼容。
答案 1 :(得分:3)
local module = require("module")
除了默认的全局(本地阴影全局,当然)之外,还会创建一个包含模块的本地变量。 Lua访问本地的速度要快得多,因此性能很可能是使用它的原因。
你得到的错误很明显,在加载模块时你不能添加文件扩展名。