1

我有两个苹果脚本:

父.scpt: property a:1

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

我在 parent.scpt 中将 a 的值更改为“2”,运行“sudo osacompile .../child.scpt”然后“sudo osascript .../child.scpt”它仍然得到值“1”,但是如果我从“AppleScript Editor”“编译”child.scpt,我可以得到正确的值“2”

我错过了什么?如何使用命令来实现这一点?

4

1 回答 1

4

在您重新编译脚本之前,属性是持久的。如果在设置属性时加载脚本文件,它是在编译时完成的,而不是在运行时完成的。这意味着脚本的副本被存储并且属性与文件无关。它与脚本编辑器一起工作的原因是文件再次重新编译,这意味着 parent.scpt 再次加载到最新版本。

我不建议加载父对象,最好加载子对象。现在您从父子链的底部开始,最好从根对象开始构建对象树。

查看您正在尝试在对象树中动态添加对象的代码。一种方法是:

父.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}

孩子.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 回答