我想创建一个程序,它在不同的文件夹中有几个模块。主程序将确定需要加载哪个模块并将其加载。除此之外,它还会加载一些核心功能。
我创建了这个逻辑的原型,效果很好。但由于我是Lua的新手,我不确定实现这一点的正确方法。
现在我有下一个文件结构:
aoc(主程序):
aoc = {}
aoc_base_path = debug.getinfo(1).source:match("@(.*)/.*$") -- base path to my program
if not aoc_base_path then
aoc_base_path = ''
else
aoc_base_path = aoc_base_path..'/'
end
local aoc_base_arg={...}
dofile(aoc_base_path.."core/core")
local module = assert(loadfile(aoc_base_path.."modules/"..aoc_base_arg[1].."/module"))
local arg = table.copy(aoc_base_arg) -- this is my custom function (I'm not provide you with listing, it just copy one table to another one
table.remove(arg,1)
module(arg,aoc) -- pass to module all arguments except first one
核心/核心(核心功能加载器):
dofile (aoc_base_path..'core/move')
核心/移动:
local function move(direction, refuel, dig, attack)
-- some logic in local function (to not be overwriten in module)
end
function aoc.move()
-- global function (it logic can be changed by module in case it needed)
return move()
end
模块/矿井/模块(模块):
local arg={...} -- I passed 2 arguments in aoc main program
arg = arg[1]
local aoc = arg[2]
aoc.move()
目前
lua> aoc矿
或者
lua> path/to/aoc mine
工作正常。但是,如果我做错了什么,谁能指出我?
编辑:通过获取改变逻辑aoc_base_path