2016-07-27T14:25:02+09:00

ModuleLoader のマニュアルのドラフト - ライブラリをロードする

現在執筆中の ModuleLoader のドラフト、第2弾です。

ライブラリの置き場所

ユーザーのホームフォルダ以下では、

システム領域では、

から、ライブラリを探します。優先順位も上の通りです。ライブラリとして扱いたいスクリプトファイルやスクリプトバンドルをこの中に配置してください。

Script Libraries フォルダは AppleScript Libraries でも使われる領域です。もっぱら、Script Libraries を使うといいでしょう。ModuleLoader に依存したライブラリだけを、Scripts/Modules に置くと良いと思います。

トップレベルのスクリプト

ModuleLoader をインストールすると、「Script Libraries/SampleLibs」フォルダに、このマニュアルで使われているサンプルがインストールされます。その中の SimpleTextLib.scpt をロードすることを考えます。

on replace_text(a_text, target, replacement)
set text item delimiters to target
set a_list to every text item of a_text
set text item delimiters to replacement
return a_list as text
end replace_text

SimpleTextLib をトップレベルの property にスクリプトオブジェクトとしてロードします。何はともあれ、サンプルコードを見てください。

property SimpleTextLib : module
property _ : boot (module loader) for me

SimpleTextLib's replace_text("How now brown cow", space, "-")
-- result : How-now-brown-cow

読み込んだモジュールを設定したい property の定義部分で 「 module 」コマンドを実行します。「 module 」コマンドは、property にモジュールの読み込み先であることの印を設定します。「 boot (module loader) for me 」で、実際のモジュールの読み込みが行われます。「 boot (module loader) for me 」は、ライブラリの読み込みを行う property の定義を行った後に実行するする必要があります。

module 」コマンドを実行した property には、property 名と同じ名前のモジュールが読み込まれます。すなわち、「 property SimpleTextLib : module 」には、

のいずれかが読み込まれます。

property 名とは別の名前のライブラリを読み込む場合は 「 module 」コマンドにライブラリ名を与えます。

property propname : module "library name"

実行時にライブラリをロードする

ライブラリのロードは、「 boot (module loader) for me 」が実行されたタイミングで行われます。次のように、property の値部分におくと、property の値はコンパイル時に評価されますから、実際の実行前にライブラリは設定されます。実行時にはライブラリのロードは行われません。

property _ : boot (module loader) for me

コンパイル時にライブラリのロードを済ますことは、

というメリットがありますが、一方で、ライブラリを更新しても再コンパイルするまで反映されないというデメリットもあります。

そこで、実行の度に最新のライブラリを読み込みを行わせるには、次のサンプルのように run ハンドラの中で「 boot (module loader) for me 」を実行してください。

property SimpleTextLib : module

boot (module loader) for me -- load library at runtime.
SimpleTextLib's replace_text("How now brown cow", space, "-")
-- result : How-now-brown-cow