2014年11月10日月曜日

InDesignスクリプトで配列要素オブジェクトを扱う際のハマり所

以下のInDesign CS3スクリプトのコード素片は、ものすごく間違いである。
どこが間違いか、ちゃんとわかってる方なら一瞬でわかるだろう。
一瞬でわからない方は、1分考えてみて、答えを読んでほしい。

...
var oRect = oPage.rectangles[iRect];
var oRect2 = oPage.rectangles.add();
oRect2.geometricBounds = [oRect.geometricBounds[0], 215, oRect.geometricBounds[2], oRect.geometricBounds[3] + 215 - oRect.geometricBounds[1]];


答えは…

配列要素を代入したこのoRectは、値ではなく、参照である。
従って、.add()した時点で、oRectは、当初とは異なるオブジェクトを指し示している可能性がある。

僕はここで20分ハマった。
今脱出したところだ。

これがJavaScriptの性質なのか、それともInDesign CS3のExtendScriptの性質なのか、ナンチャッテプログラマーの僕にはわかりましぇ~ん。

0 件のコメント:

コメントを投稿