2012-07-07T10:45:44+09:00
AppleScript のスクリプトオブジェクトにハンドラが実装されているか調べる
AppleScript のスクリプトオブジェクトであるハンドラが実装されているかどうかを調べて、処理を分岐させたいことがある。そこで、スクリプトオブジェクトであるハンドラが実装されている調べる適切な方法を検討してみた。
まず、安直に思いつくのは、ハンドラが実行してエラーが起きるかどうかを調べる。
でもこの方法だと、ハンドラの実行途中に起きたエラーと区別がつかない。ハンドラの実装の有無を調べるという仕様になっていない。
そこで、次のような方法を考えてみた。
まず、スクリプトオブジェクトにプロパティにアクセスするのと同じようにハンドラにアクセスする。実は、スクリプトオブジェクトにとってハンドラとプロパティには区別が無い。プロパティにハンドラオブジェクトが代入された物を呼び出して使っているだけなんだ。
したがって、目的のハンドラが実装されていれば、ハンドラオブジェクトが返ってくる。でも、それはプロパティとして設定された値かもしれない。返ってきた値の class を調べて、hanlder class であれば、めでたくそのハンドラが実装されていると判断できる。