1

私は2つのアップルスクリプトを持っています:

parent.scpt: property a:1

child.scpt: property parent:load script POSIX file ".../parent.scpt" return a

parent.scptでaの値を「2」に変更し、「sudo osacompile ... / child.scpt」を実行してから、「sudo osascript ... / child.scpt」を実行すると、値「1」が取得されますが、 「AppleScriptEditor」からchild.scptを「コンパイル」すると、正しい値「2」を取得できます。

私は何か見落としてますか?コマンドを使用してこれを実現する方法は?

4

1 に答える 1

4

プロパティは、スクリプトを再コンパイルするまで保持されます。プロパティの設定中にスクリプト ファイルをロードすると、実行時ではなくコンパイル時に行われます。これは、スクリプトのコピーが保存され、プロパティがファイルに関連付けられていないことを意味します。スクリプト エディターで動作する理由は、ファイルが再コンパイルされるためです。つまり、parent.scpt が最新バージョンに再度読み込まれます。

親オブジェクトをロードすることはお勧めしません。子オブジェクトをロードすることをお勧めします。ここで、ルート オブジェクトからオブジェクト ツリーを構築する方が適切な親チェーンの最下部から開始します。

オブジェクトツリーにオブジェクトを動的に追加しようとしているコードを見ると。これを行う1つの方法は次のとおりです。

親.scpt:

property name : "I'm the parent"
property b : 100

set theChildLib to load script POSIX file "/Users/shortname/Desktop/child.scpt"
set theChild to theChildLib's newChildObject(me)
return {theChild's parent's name, theChild's name, theChild's a, theChild's b}

child.scpt:

on newChildObject(_parent)
    script childObject
        property parent : _parent
        property name : "I'm the child"
        property a : 2
    end script
    return childObject
end newChildObject

ご覧のとおり、子から親を呼び出すことができます。オブジェクトに存在しないプロパティを呼び出すと、親子関係に従います。

于 2013-01-10T11:36:57.400 に答える