script文で安直に複数のScriptをつなげた報いが……

547070558_46
複数のAppleScript A,B,Cを連結して1本のプログラムにしたい場合、「ああ、変数名の衝突はなかったろうか」「サブルーチン名がぶつかっていたらやだなあ」などと悩む必要はない。

script文という便利なものがあって、物理的に1本のScriptを、論理的にパーティショニングできるのである。だから、サブルーチン名(ハンドラ名とかまあ、お好きなように呼んで)とか変数名が重複していたとしても、それをすべてきれいに回避できるのであった。

論理分割したScript(scriptName)の中に入っているサブルーチン(callSub)を呼び出すときには、

  callSub(aParam) of scriptName

みたいに呼べばいいだけだ。鈴木さんからの受け売りだが、これが安易に使えてすんげー楽なので多用していた。

で、その普通のAppleScript(スクリプトエディタ上で編集するもの)を、Xcode+InterfaceBuilderのAppleScript Studio環境で作ったプロジェクトの中に、何も考えずに突っ込んだ。

…………動かない(ーー;;; 単体では実行できるのに、プロジェクトに突っ込むと動かない。

AppleScript Studioのアプリケーション内では、メインのScriptから、この後から追加したScriptをまるごと変数に読み込んできて、その中に入っているScriptを呼び出すようになっているのだ。

とっころが、呼び出したScriptの中に論理パーティション構造があったものだから、外部からこのScriptをローディングした親Scriptに「そんなもん知らないよ」と言われてしまったのだ。

 「ぐぁ〜、もう1回分割ローディングするかなぁ」

などと頭を抱えてしまった。論理パーティショニングされたScriptをそれぞれ個別に変数に読み込んで呼び出すようにするか、それとも論理パーティショニングを解除して、1本のScriptに書き換えてしまうか……の、どちらかしかないように見えた。どっちもかったるそうだ。

 「ええい、なんかウソっぽいけどこれで通るかぁ?!」

ちょっといいアイデアがひらめいたので、

  repCode(origCode, newCode) of InDesignChange

と書いていた箇所を、

  repCode(origCode, newCode) of InDesignChange of me

なんて書き換えてみた。

……ビルドしてみると、問題なく動いてしまった。なんだ、割とあっけないな(汗) 今後も、これでハマるかもしれないので、Keynoteで資料にしておくこととしよう、、、、、

Copyright By Piyomaru Software. All Rights Reserved