Lua 的 Module
Lua从5.1开始官方提供了module的实现标准
使用module的时候有一点比较容易忽略,module指令运行完之后,整个环境被压栈,所以前面全局的东西再看不见了。
比如定义一个test 模块,使用
Module(“test”)
之后,下面的再看不见前面的全局变量,那么如果在这个module里面想要实现print函数怎么样呢?可以用一个简单的实现方法local print =print 这样来实现
这样print是一个local变量,下面也是可以看到的。
还有一种巧妙的方式,lua 5.1提供一个package.seeall 可以作为module的option传入
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里面,从而达到让配置数据统一的目的。