ModuleLoader の用例集をまとめてみた。色んな場合のモジュールのロードの仕方です。ModuleLoader 2.2b1 を前提にしてます。他にどんな場合がある?
コンパイル時にモジュールをロードしたい
property ModuleA : module
property loader : boot (module loader) for me
--
- モジュールを設定した property で、module コマンドを実行します。
- モジュールのロード/設定は、boot (module loader) for me で行われます。boot コマンドを property に置くことで、コンパイル時に boot コマンドを実行します。
- モジュールを設定したい property は、boot コマンドよる前に置かなければなりません。
- 実行時には、モジュールおよび ModuleLoader への依存性がなくなるので、配布するスクリプトに適しています。
実行時に property にモジュールをロードしたい
property Module1 : module
boot (module loader) for me
--
- run ハンドラなどで boot コマンドを実行することによって、実行時にモジュールをロードします。
- 常に、最新のモジュールを使うことができるメリットがあります。
ローカル変数にモジュールをロードしたい。
property loader : missing value
tell (module loader)
set loader to it --
set ModuleA to load("ModuleA")
end tell
- module loader で loader object を生成します。
- loader object の load ハンドラを使用します。
- loader object はその後の仕様の為に、property に設定しておくのがおすすめでが、そこでしかモジュールを読み込まないのであれば、property に設定する必要はありません。
コンパイル時に property にロード、実行時にローカル変数にロード
property ModuleA : module
property loader : boot (module loader) for me
tell loader
set ModuleB to load(module "ModuleB" with reloading)
end tell
- property loader のところで、boot コマンドを設定し、property ModuleA にモジュールを設定します。
- 実行時には、loader object の load コマンドを使って、モジュール ModuleB をロードします。
- load コマンドの引数の中で ModuleB は必ずファイルからロードすることを明示します。
- load("ModuleB") だと、2回目以降の実行では、最初の実行でロード/キャッシュされた ModuleB が返ってきます。
モジュールの中からモジュールを使いたい。
property ModuleB : module
on run --
boot (module loader) for me
--
end run
- 「実行時に property にモジュールをロードしたい」と同じようにしてください。
- 使用したいモジュールを設定したい property に module コマンドを置いてください。
- ModuleLoader このモジュールのロードの際に、property を調べて、必要なモジュールのロードと設定を行います。
- 単体で動作させたいときは、boot (module loader) for me を実行すれば、モジュールがロードされます。
バンドルの中からモジュールをロードしたい。
tell (module loader)'s set_additional_paths({path to resource "Scripts"})
set ModuleA to load("ModuleA")
end tell
- loader object の set_additional_paths でバンドル内でスクリプトがある場所を追加します。
- set_additional_paths の返り値は、メーッセージの送り先の loader object です。