一个Lua模块的数据结构使用一个Lua值(通常是Lua表或者Lua函数),一个Lua模块代码就是一个会返回这个Lua值得代码块
常规写法
local M = {}
local modelName = ...
_G[modelName] = M
setmetatable(M,{__index = _G})
setfenv(1,M)
return M
--package.seeall让原来的_G依然有效
--等效于setmetatable(M,{__index = _G})
module(...,package.seeall)
package.seealll
1. 破坏了模块的高内聚,是的模块可以读写全局属性 例如xxx.os
2. 污染了全局环境变量,使得没有引用它的文件也能调用filename模块的方法
local M = {}
local mt = {__index = M}
function M.new()
return setmetatable({},mt)
end
return M