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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值