Applescript子程序

问题描述:

我有一个helperScript,它有一些我经常使用的基本功能。Applescript子程序

我目前的脚本的流程是这样的:

on SubA() 
    Set HelperScript to load….. 
    tell HelperScript 
    : : 
     : : 
    end tell 
end SubA 

on SubB() 
    Set HelperScript to load….. 

    tell HelperScript 
    :: 
     :: 
    end tell 
end SubB 

on run paravlist 
    Set HelperScript to load….. 

    tell HelperScript 

    SubA() 

    SubB() 

    end tell 
end run 

我不能作为助手脚本正在建立,并从每个子程序的习惯叫苏巴()和SUBB()。如果我注释掉helperScript的用法。我可以从另一个调用子程序。处理这样的问题的最佳方法是什么?我想在每个子程序中使用helperScript。

+0

你能解释一下你说的“我无法调用SubA()和SubB()...”吗?你得到的错误是什么,或者什么不按预期工作,为什么。 – ThrowBackDewd

在再次阅读您的问题几次后,我想我已经知道您在问什么了。您正试图在您的方法中加载脚本,然后您想调用该脚本中的方法?

如果是这样的话,我觉得你要寻找的是这样的...

set HelperScript to load script... 
set theResult to someMethod() of HelperScript 

编辑: 我还不太清楚,如果你有两个脚本或一个,所以我已经更新了答案以反映这两种情况。

双脚本示例...

property HelperScript : null 

on run 
    try 
     if not loadScript() then error "Unable to load script" 

     set rslt1 to SubA() of HelperScript -- This approach assumes HelperScript.scpt is a different script and it contains a method called SubA 
     set rslt2 to SubB() of HelperScript -- This approach assumes HelperScript.scpt is a different script and it contains a method called SubB 

    on error errMsg 
     activate 
     display dialog "Error: " & errMsg buttons {"OK"} default button 1 giving up after 10 
    end try 
end run 


on loadScript() 
    try 
     set HelperScript to load script (POSIX file "/Path/To/HelperScript.scpt") 
     return true 
    on error 
     return false 
    end try 
end loadScript 

单脚本示例...

on run 
    try 
     set rslt1 to SubA() -- This approach assumes your HelperScript is THIS script 
     set rslt2 to SubB() -- This approach assumes your HelperScript is THIS script 
    on error errMsg 
     activate 
     display dialog "Error: " & errMsg buttons {"OK"} default button 1 giving up after 10 
    end try 
end run 

on SubA() 
    try 
     -- Do something here 

     return true -- or some other value 
    on error 
     return false -- or some other value 
    end try 
end SubA 

on SubB() 
    try 
     -- Do something here 

     return true -- or some other value 
    on error 
     return false -- or some other value 
    end try 
end SubB 
+0

对不起,我缺乏信息。我得到了错误:错误“脚本”不理解“SubA”消息。“号码-1708从«剧本» – AnuRV

+0

我按照你的建议去做。我仍然得到错误。我想这里的问题是在每个子例程中声明和使用helperScript。有没有一种方法可以在全局声明它并使用它的所有子例程? – AnuRV

+0

@AnuRV - 查看两种不同情况的更新答案,我并不完全确定你试图达到的目标 – ThrowBackDewd

的AppleScript也包括在内,因为10.9 library loading system。这不是很好(例如避免SDEF垃圾,因为它是1. make-work和2. bug-injector),但它通常可以完成这项工作。我建议你采用这一点。