是否可以指定要从Autohotkey 2中的onEvent调用的匿名函数?

时间:2019-07-02 09:09:51

标签: autohotkey

我想知道是否可以指定在Autohotkey V2中用onEvent调用的匿名函数。

以下无效脚本试图概述我要实现的目标:

g := guiCreate()

txt := g.add('text', 'w200 r1')
txt.text := 'Hello!'

g.onEvent('close', (*) => function() {
  msgBox('Going to exit application')
  exitApp()
})

g.show()

1 个答案:

答案 0 :(得分:1)

粗箭头功能(() => expr)“评估子表达式 expr 并返回结果。” (Source

文档的下一部分说明:

逗号可用于在一行上写多个子表达式。这最常用于将多个分配或函数调用组合在一起。例如:x:=1, y+=2, ++index, MyFunc()。这样的语句从左到右依次执行。


这些变体似乎可以正常工作(我使用的是v2.0-a108):

g.onEvent('close', (*) => (
  msgBox('Going to exit application')
  exitApp()
))

g.onEvent('close', (*) => (
  msgBox('Going to exit application'),
  exitApp()
))

g.onEvent('close', (*) => (msgBox('Going to exit application') exitApp()))

g.onEvent('close', (*) => (msgBox('Going to exit application'), exitApp()))

在多行和单行表达式中,msgBox()exitApp()之间的逗号似乎都是可选的。我认为多行表达式在没有逗号的情况下会更清晰,而单行表达式在使用逗号时会更易读。

尽管如果您有更复杂的子表达式,则需要一些逗号。例如,如果没有第三行的逗号,以下代码将不起作用:

g.onEvent('close', (*) => (
  msgBox('Going to exit application')
  foo := 1 + 2,
  msgBox(foo)
  exitApp()
))

(或者,您可以编写(foo := 1 + 2),并且不需要逗号。)

我不知道添加或省略逗号是否还有其他作用。另请参阅:comma performance


您还可以将子表达式与&&||组合在一起。在下面的示例中,将不会调用exitApp(),因为1 > 2false。请注意,不需要在表达式两边加上括号:

g.onEvent('close', (*) => msgBox('Going to exit application') && 1 > 2 && exitApp())