ライブラリのバージョンの指定|プロジェクト固有のライブラリ

module_loaded_by ハンドラ

script "ModuleLoader"'s setup(me) 」によってライブラリがロードされた直後に、ライブラリの「 module_loaded_by 」ハンドラが呼ばれます。ライブラリが「 module_loaded_by 」ハンドラを実装することにより、ライブラリがロードされたタイミングでさまざまな処理を行うことができます。

ロード時にライブラリの初期化

まずは、ライブラリがロードされたタイミングでライブラリの初期化を行うサンプルです。追加のライブラリの読み込みを行っており、動的にロードするライブラリを変えられます。

property MoreLib : missing value
property _value : missing value

on module_loaded_by(loader)
log "module_loaded_by"
-- initialization of myself
set my _value to current date

-- load an additional library
tell loader
try
set MoreLib to load("ExtendedTextLib")
on error
set MoreLib to load("SimpleTextLib")
end try
end tell
return me
end module_loaded_by

on time_from_loaded()
return ((current date) - (my _value)) as text
end time_from_loaded

上のライブラリを読み込むトップレベルのスクリプトです。

property ModuleLoadedEvent : "@module"

script "ModuleLoader"'s setup(me)
delay 1
tell ModuleLoadedEvent
log time_from_loaded() -- result : 1
tell its MoreLib
log replace_text("How now brown cow", space, "-")
-- result : How-now-brown-cow
end tell
end tell

他のライブラリを継承したライブラリ

module_loaded_by 」ハンドラのもう一つの大きな用途は、他のライブラリを継承したライブラリを作ることです。

通常、スクリプトオブジェクトの parent はコンパイル時に決定されます。実行時に parent を決定するには、ハンドラの内部で、スクリプトオブジェクトを定義する必要があります。

次のサンプルは、ライブラリ「 SimpleTextLib 」を継承したスクリプトオブジェクト「 ExtendedTextLib 」を、module_loaded_by ハンドラ内で定義/生成し、それをライブラリとして扱います。

property name : "ExtendedTextLib"
--property SimpleTextLib : "@module"
use SimpleTextLib : script "SampleLibs/SimpleTextLib"

on module_loaded_by(loader)
log "module_loaded_by"
script ExtendedTextLib
property parent : SimpleTextLib
on remove_spaces(a_text)
return my replace_text(a_text, space, "")
end remove_spaces
end script

return ExtendedTextLib
end module_loaded_by

上のライブラリを読み込むトップレベルのスクリプトです。

property ExtendedTextLib : "@module"

script "ModuleLoader"'s setup(me)

tell ExtendedTextLib
remove_spaces("How now brown cow")
-- result :"Hownowbrowncow"
end tell
ライブラリのバージョンの指定|プロジェクト固有のライブラリ