【水桥月与Lua】——Lua的Module

本文介绍了Lua从5.1版本开始引入的module功能,强调了module执行后会隐藏全局变量的效果。为了在模块中使用全局函数如print,文章提出了两种解决方案:一是通过`local print = print`创建局部变量;二是利用`package.seeall`选项。通过一个实验示例,展示了如何在不同文件间使用和调用模块,以及如何利用模块统一管理配置数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lua 的 Module

Lua5.1开始官方提供了module的实现标准

使用module的时候有一点比较容易忽略,module指令运行完之后,整个环境被压栈,所以前面全局的东西再看不见了。

比如定义一个test 模块,使用

Module(“test”)

之后,下面的再看不见前面的全局变量,那么如果在这个module里面想要实现print函数怎么样呢?可以用一个简单的实现方法local print =print 这样来实现

这样print是一个local变量,下面也是可以看到的。

还有一种巧妙的方式,lua 5.1提供一个package.seeall 可以作为moduleoption传入

Module(“test”,package.seeall)

这样就ok了。——以上的使用经验是来自云风大大的,下面举一个自己写的实验例子来记录自己的这个学习。

做了一个实验的test,过程与源码如下

在同级目录下面定义了3个文件,module.lua , module_call.lua , module1.lua

Module.lua

module("Data")


function add(r,i)

return r+i

end


 

Module1.lua

module("Data")


function del(r,i)

return r-i

end


Module_call.lua

package.path = package.path..";../?.lua"


require "module"

require "module1"


result  = Data.add(1,2)

print(result)


result1 = Data.del(1,2)     

print(result1)


 

这样运行module_call.lua的结果是

3

-1


 

意思就是require之后可以统一用模块module这个全局环境来调用里面的函数以及数据,

这样写有一个明显的好处是我们可以将配置表的所有数据统一放进声明模块data里面,从而达到让配置数据统一的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值