我想知道是否可以指定在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()
答案 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 > 2
是false
。请注意,不需要在表达式两边加上括号:
g.onEvent('close', (*) => msgBox('Going to exit application') && 1 > 2 && exitApp())