さらに前回に引き続き、AppleScript のハンドラで遊んでみる。
AppleScript のハンドラを global 変数にいれて、複数のスクリプトオブジェクトでハンドラを共有できるか、ということを試してみた。
結果として、うまくきませんでした。
- global 変数に設定されたハンドラを直接実行できるのは、トップレベルのスクリプトだけ。
- トップレベル以外のスクリプトから実行するには、何らかのスクリプトオブジェクトのproperty に設定しなければならない。
script ScriptA
property parent : AppleScript
property _msg : "I'm a"
global g_msg
on msg()
script
property msg : contents of g_msg
msg()
end script
run result
end msg
on call_g_msg()
return g_msg() --
end call_g_msg
end script
property _msg : "top level"
global g_msg
on msg()
return my _msg
end msg
on main()
set g_msg to msg
log g_msg() --
log ScriptA's msg() --
ScriptA's call_g_msg() --
end main
main()
きっと、global 変数に与えた値は、トップレベルの property として設定されるのだろうね。これは、global 変数は トップレベルの property と値を共有するという性質からも推測できる。だから、global 変数に設定したハンドラはトップレベルは実行することができるけど、トップレベル以外からはダメよということになのか。
任意のスクリプトオブジェクトは、global 変数を自分の property と同等に扱ってくれてもいい気がするのだけど。