可能的重复:
为什么将全局Lua函数设为本地函数?
在社区的许多lua脚本中,我看到了类似于向脚本添加模块的东西:
local module = require("module")
但根据lua手册,这不是加载模块的方式。模块本身内部有其模块名称,因此
require("module")
就足够使用这样的模块了:module.myfunction()。第一个带有本地定义的例子只在模块var中写入"true",表示模块已成功加载。
奇怪的是,我看到这种加载"localmodule=require("module")"的方式在网络中随处可见。由于这个错误,我无法使用lua社区的大多数脚本。我还想知道为什么我还没有在网上发现任何关于这方面的问题。
接下来的事情是,实际上加载模块有时也会导致奇怪的错误。例如:我有一个脚本
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。。。
在Lua 5.2中,表现良好的模块不再像在Lua 5.1中那样导出全局变量。
除了本地变量提供的速度增加外,为了与最新的Lua版本兼容,还应使用local module = require "module"
。
local module = require("module")
创建一个包含模块的局部变量,此外还有默认的global(当然,局部会遮蔽全局)。本地语言在Lua中的访问速度要快得多,所以性能很可能是使用它的原因。
您得到的错误是显而易见的,在加载模块时不能添加文件扩展名。