main.lua
Audio.lua
打印:
require("Audio")
Audio:test1(3)
Audio:test2(3)
print(memberVar)
print(Audio.memberVar)
Audio.lua
module(..., package.seeall);
function test1(num)
print(type(num))
end
function test2(self,num)
print(type(num))
end
memberVar = 100
打印:
table
number
nil
100
可以看到test1传进去的参数类型变成了table类型。
原因在于module函数里的模块都是点号实现,需要传入self。
其中的module近乎等价于这段代码
local M = {};
local modelName = ...;
_G[modelName] = M;
setmetatable(M, {__index = _G});
setfenv(1, M);
Audio.lua这个模块里的全局环境设置为M,于是,我们直接定义函数的时候,不需要再带M前缀。
因为此时的全局环境就是M,不带前缀去定义变量,就是全局变量,这时的全局变量是保存在M里。
Audio.lua
等价于
local M = {};
local modelName = ...;
_G[modelName] = M;
function M.test1(num)
print(type(num))
end
function M.test2(self,num)
print(type(num))
end
M.memberVar = 100
return M;
其中
“…”就是传递给模块的模块名,在这里其实就是“Audio”这个字符串。
至此豁然开朗。