異なるフォルダーに複数のモジュールを持つプログラムを作成したいと考えています。メイン プログラムは、どのモジュールをロードする必要があるかを判断し、それをロードします。それに加えて、いくつかのコア機能もロードされます。
このロジックのプロトタイプを作成しましたが、うまく機能します。しかし、私は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
core/core (コア関数ローダー):
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 mine
また
lua> path/to/aoc mine
正常に動作します。しかし、私が何か間違ったことをしている場合、誰かが私を指摘できますか?
編集:取得でロジックを変更aoc_base_path