wow lua 解决多文件编写引用文件变量顺序问题的一种方案
之前的方式通过addon.拿到的table可能为空,因为此时文件可能并未加载
现在的方式是通过将表的引用先行创建并挂载到addon上,以便后续加载的文件实现成员
(当然所有的接口都不应该立即调用,而应该由入口文件的统一调用,避免出现先后顺序问题)
__modular.lua
local addonName, addon = ...
--addon 是当前插件的table
--addonName 会是当前插件的名称
--print("addonName", addonName)
--即是创建库,也是获取库
local function createOrGetTable(libName)
local key = addonName .. "_" .. libName
if addon[key] == nil then
addon[key] = {}
end
return addon[key]
end
--导出和导出只有语义的区别,实际是一个调用访问
addon.import = function(libName)
return createOrGetTable(libName)
end
addon.export = function(libName)
return createOrGetTable(libName)
end
Lib1.lua
local addonName, addon = ...
--导入
--local Lib2 = addon.Lib2
local Lib2 = addon.import("Lib2")
--导出
-- local Lib1 = {}
-- addon.Lib1 = Lib1
local Lib1 = addon.export("Lib1")
function Lib1:Fn1()
Lib2.Fn2()
end
print("Lib1 加载完成 Lib2是",Lib2)
Lib2.lua
local addonName, addon = ...
--导出
-- local Lib2 = {}
-- addon.Lib2 = Lib2
local Lib2 = addon.export("Lib2")
function Lib2:Fn2()
print("来自 Lib2 的 Fn2")
end
print("Lib2 加载完成 Lib2是", Lib2)
Main.lua
local addonName, addon = ...
--导入
-- local Lib1 = addon.Lib1
local Lib1 = addon.import("Lib1")
Lib1:Fn1()
TrykleTest.toc
## Title:TrykleTest
__modular.lua
Lib1.lua
Lib2.lua
Main.lua