欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

lua模块化实现

程序员文章站 2022-06-12 16:48:29
...

公司以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