AppleScriptで、ちゃんと勉強しないとつまづくところがわかってきた。
ひとつは「暗黙のget」
もう一つは「reference」
「暗黙のget」は、
本来、AppleScriptはobjectを指定した場合、直接指定できてないとき( home とか)は、getして対象アプリ(tellしているアプリ)に解決させて直接値を取らないといけない。ところが大抵の場合AppleScriptが気を利かせて「暗黙のget」をしてくれてしまう。これが完璧ならいいのだけど、なぜだか時々「暗黙のgetが出来ると思い込む」時があって、getしようとしてアプリから「それをgetする方法を知らない」と言われてしまう。この場合、大抵「何とか of 何とか of 何とか…」という形で、途中のオブジェクトの指定を解決してやればエラーが取れる。なので「何とか of (get 何とか of 何とか…)」と途中に明示的にgetを入れてやることでエラーが取れる。
「reference」は、
Cのポインターのようなもの。これも通常、AppleScriptがうまくde-reference してくれるのでreference と直接のobjectと区別がつかない。が、 is (=)と is not (≠)だけはこの自動de-referenceがされず、reference値を直接オペランドに使ってしまう。これではまる典型はrepeat文でrepeat文は
repeat with i in list
のiはlistの各itemへのreferenceになっている。ここで
if i is something then
とやると、永遠にtrueにならない。ここは
if (contents of i) is something then
と、referenceのcontents propertyを取り出してreferenceしているobjectを明示的にとりにいかないとだめ(自動的にde-referenceされない)。
これと、ごく当たり前ながら「何かのobjectをいじる時は必ず、そのobjectをかかえているapplicationに対してtellしないとだめ」。handlerの中も別scopeなので、明示的にtell application "..." ~ end tellとか ... of application "..." を書かないとだめ。という3つ辺りが、AppleScriptをやろうとして、language referenceを見たり、ネットの入門解説サイトをちょっとみただけではエラーが取れないポイントだという気がしてきた。
0 件のコメント:
コメントを投稿