使用 module 创建一个模块
创建 moduleTestA.lua
-- 创建一个模块
module('ModuleTestA', package.seeall)
TableA = { number = 100}
TableA.Execute = function()
print("TableA.Execute:"..TableA.number)
end
Compare = function(a, b)
print("Campare:a > b:"..tostring(a > b))
end
创建 moduleTestB.lua
-- 加载 moduleTestA.lua
require("moduleTestA")
local number = ModuleTestA.TableA.number
print("number:"..number)
ModuleTestA.TableA.Execute()
ModuleTestA.Compare(10, 5)
因为 moduleTestA.lua 脚本 执行了 module 函数
moduleTestB.lua 脚本 通过执行 require(“moduleTestA”)
moduleTestB.lua 脚本可以直接访问到 moduleTestA.lua 脚本中的 ModuleTestA
通过 ModuleTestA 可以访问到 moduleTestA.lua 脚本中的所有全局 表、函数、变量
moduleTestB.lua 脚本不能直接访问 moduleTestA.lua 脚本中的 全局/内部 表、函数、变量
注意:module 函数 不提供外部访问,必须在调用它之前,为需要访问的外部函数或模块声明
适当的局部变量
Lua 提供了一种更为方便的实现方式,在调用 module 函数时,传入package.seeall
module(‘ModuleTestA’, package.seeall)
什么意思呢?
将 moduleTestA.lua 脚本中
module(‘ModuleTestA’, package.seeall)
改为 module(‘ModuleTestA’)
moduleTestB.lua 脚本 不变,执行
lua: .\moduleTestA.lua:19: attempt to call global 'print' (a nil value)
stack traceback:
.\moduleTestA.lua:19: in function 'Execute'
moduleTestB.lua:9: in main chunk
[C]: ?
结果报错,因为 TableA.Execute 函数调用了 print 函数,而 print 是外部函数,执行了 module(‘ModuleTestA’) 后,在 moduleTestA.lua 脚本中 就不能调用 print 函数了,
那怎么处理呢?
在执行 module(‘ModuleTestA’) 前将使用到的所有的外部函数、表、变量导入,如下
local print = print
module(‘ModuleTestA’)
然后在 module(‘ModuleTestA’) 后边的代码就能访问 print 函数了