公司以lua作为脚本进行前端开发,现在要求实现模块化开发。
lua5.2推荐的方式:将table作为module
--myModule.lua文件名
local myModule = {};
--变量
local temp = 10;
--函数
function myModule.fun_1()
print("this is first function!")
end
function myModule.fun_2()
print("this is second function!")
end
--返回table
return myModule
引用
local testModule = require("myModule");
testMoudle.temp;
testMoudle.fun_1();
注意
- 测试文件是和封装好的模块在同一个目录,否则引用时需要设置路径。
- 模块名称和文件名称必须相同
不建议使用以下方式
lua5.0/lua5.1旧方式
--myModule.lua文件名
module("myModule",package.seeall)
function fun_1()
print("this is err")
end
引用
require("myModule")
myModule.fun_1();
此方式引起的问题
- 在定义了一个module()之后,前面定义的全局变量就都不可用了,包括print函数等,如果要让之前的全局变量可见,必须在定义module的时候加上参数package.seeall
--全局变量
gloable_temp = 1;
--定义module
module("myModule");
--以上所有全局变量都不可用,因为module指令运行完后,整个环境(上下文)被压栈
package.seeall这种方式破坏了模块的高内聚,它可以读写全局属性
第二个缺陷是module函数的side-effect引起的,它会污染全局环境变量。
参考:
blog.kenshinx.me
blog.codingnow.com