模块声明一:
module(...,package.seeall)
分析:模块中module函数中以...为模块名,可动态转换成父模块require调用lua模块名。此时不需要另外指定模块名,避免了更换模块名带来的修改。并且模块中的全局变量和函数不需要另外加上模块名前缀。
模块声明二:testmodule.lua
local M={
gValue1 = "value1",
gValue2="value2"
}
function M.func1(tb,para1,para2,para3)
func2(para1,para2,para3)
end
local function func2(para1,para2,para3)
end
return M
--------调用模块中的函数示例--
local M=require "testmodule"
--注意:这里穿了三个参数,模块中的func1必须要4个参数来接受,对应的是func1里的para1,para2,para3
M.func1(str1,str2,str3)
三、关于_G
可以理解lua中的_G是一张全局表,所有的全局变量都是定义其中,模块的加载除了使用setfenv函数如下:
local _newG={}
setfenv(1,_newG)
以上会重新设置模块里的全局环境,此时一些lua的内置函数未申明将无法再用。
通过以下方法可以保留原来的_G环境:
local _newG={}
setmetatable(_newG,__index=_G)
setfenv(1,_newG)