2010-04-12T22:55:15+09:00

AppleScript のハンドラを global 変数を経由して共有・・・できません

さらに前回に引き続き、AppleScript のハンドラで遊んでみる。

AppleScript のハンドラを global 変数にいれて、複数のスクリプトオブジェクトでハンドラを共有できるか、ということを試してみた。

結果として、うまくきませんでした。

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() -- error !!
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() -- result : "top level"
log ScriptA's msg() -- result : "I'm a"
ScriptA's call_g_msg() -- error !!
end main

main()

きっと、global 変数に与えた値は、トップレベルの property として設定されるのだろうね。これは、global 変数は トップレベルの property と値を共有するという性質からも推測できる。だから、global 変数に設定したハンドラはトップレベルは実行することができるけど、トップレベル以外からはダメよということになのか。

任意のスクリプトオブジェクトは、global 変数を自分の property と同等に扱ってくれてもいい気がするのだけど。