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

如何调用Applescript中变量中存储的处理程序,applescript,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>> 关于Foo()的 日志“Foo” 完福 关于Bar() 日志“条” 端杆 将MyHandl

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>>
关于Foo()的

日志“Foo”
完福
关于Bar()
日志“条”
端杆
将MyHandler设置为{Foo,Bar}
将x设置为myHandlers中的第一项
日志x--

现在如何调用“x”?在官方文档中找不到此信息;尝试了一些关键字,如“run”、“exec”,但都不起作用。

不要这样做–这是一种未定义的行为,不能按预期工作。(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"
有一些[1]你可能会觉得有用;e、 g.查看
列表
库的
排序列表
命令和
文本
库的
搜索文本
命令,这两个命令都采用可选参数,使用此技术启用用户可自定义的行为



[1] 顺便说一句,也可以随意愚弄我的请求,包括10.13中的那些库;他们收到的请求越多,他们就越有可能这样做。

不要这样做–这是一种未定义的行为,不能按预期工作。(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"
有一些[1]你可能会觉得有用;e、 g.查看
列表
库的
排序列表
命令和
文本
库的
搜索文本
命令,这两个命令都采用可选参数,使用此技术启用用户可自定义的行为


[1] 顺便说一句,也可以随意愚弄我的请求,包括10.13中的那些库;他们收到的请求越多,就越有可能这样做