如何在Applescript中调用存储在变量中的处理程序

时间:2016-11-03 22:55:05

标签: applescript

AppleScript新手,它看起来变量可以设置为脚本或处理程序:

on Foo()
    log "Foo"
end Foo

on Bar()
    log "Bar"
end Bar

set myHandlers to {Foo, Bar}
set x to the first item in myHandlers
log x -- <<handler Foo>>

现在如何调用'x'?无法在官方文档中找到此信息;尝试了一些关键词,如“run”,“exec”,都没有用。

1 个答案:

答案 0 :(得分:2)

不要这样做 - 它是一种未定义的行为,并没有按预期工作。 (AppleScript处理程序不是闭包。)正确的方法是将每个处理程序包装在脚本对象中并分配它们:

script Foo
  on doit()
    log "Foo"
  end doit
end script

script Bar
  on doit()
    log "Bar"
  end doit
end script

set myHandlers to {Foo, Bar}
set x to the first item in myHandlers
x's doit() -- logs "Foo"

有一些examples here [1]你可能会觉得有帮助;例如请参阅List库的sort list命令和Text库的search text命令,这两个命令都采用使用此技术启用用户的可选参数 - 可自定义的行为。

[1]顺便说一句,也可以随意欺骗我的Radar ticket请求Apple在10.13中包含那些库;他们获得的请求越多,他们就越有可能这样做。