Lua:“local var = require(”my lib“)的问题

时间:2012-09-29 14:15:13

标签: module lua require

  

可能重复:
  Why make global Lua functions local?

在社区的许多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 ......

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:3)

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

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