Lua 模块 module

Lua 模块 module

使用 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 函数了

猜你喜欢

转载自blog.csdn.net/LIQIANGEASTSUN/article/details/127599805