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
posted @ 2024-08-31 14:18  trykle  阅读(22)  评论(0编辑  收藏  举报