Array.assignStructやDictionary.assignStructで二次元配列などをコピーすると、中に入っている分の配列はシステム側で新しく作成されます。そのような配列には追加した分の関数が反映されません。
以下のコードのERRORという部分では「testFuncが見つかりません」というエラーがでます。
(Array.testFunc incontextof bar[0])(); のように直接呼ばない形なら使えます。
// Array に関数を追加
Array.testFunc = function() { Debug.message("testFunc called"); };
var foo = [];
foo.testFunc(); // OK
foo[0] = [];
foo[0].testFunc(); // OK
var bar = [];
bar.assignStruct(foo);
bar.testFunc(); // OK
bar[0].testFunc(); // ERROR
assignStruct以外にも(const)を付けた場合や関数の可変長引数としての配列の場合などにも駄目なようです。
Array.testFunc = function() { Debug.message("testFunc called"); };
var foo = (const)[];
foo.testFunc(); // ERROR
[].saveStruct("array.tjs");
var bar = Scripts.evalStorage("array.tjs");
bar.testFunc(); // saveStructで保存すると(const)が付くので ERROR
function func(args*) {
args.testFunc(); // ERROR
}
func();
saveStruct.dllのArray.save2など、プラグインで追加されるものについても同様です。
