我有两个苹果脚本:
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”,但如果我从“AppleScript编辑器”“编译”child.scpt,我可以得到正确的值“2”
我错过了什么吗?如何使用命令实现此目的?
答案 0 :(得分:4)
在重新编译脚本之前,属性是持久的。如果在设置属性时加载脚本文件,则在编译时完成,而不是在运行时完成。这意味着存储了脚本的副本,并且该属性与文件无关。它与脚本编辑器一起使用的原因是文件再次被重新编译,这意味着parent.scpt再次加载到最新版本。
我不建议加载父对象,最好加载子对象。现在你从父代链的底部开始,最好从根对象开始构建对象树。
看着你的代码,你会尝试动态地在对象树中添加对象。一种方法是:
parent.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
如你所见,我可以给孩子打电话给父母。当我调用对象中不存在的属性时,它将跟随父母链。