无法在 AutoHotkey 中创建多线阵列
Cannot create a multi line arrays in AutoHotkey
我是 ahk 的新手,我 运行 遇到了一些问题。
无论我尝试什么,我都无法让数组跨越多行。
这是AHK本身的局限性还是我没有正确理解语法?
一个例子:
TypeHandler := [
{"pattern": "=[0-z]*", "callback": "HandleEIN"},
{"pattern": "&[0-z]*", "callback": "HandleProduct"}
]
这被编译器猛烈抨击为第二行不包含可识别的操作,但是当我重新格式化它时它可以正常工作
TypeHandler := [ {"pattern": "=[0-z]*", "callback": "HandleEIN"}, {"pattern": "&[0-z]*", "callback": "HandleProduct"} ]
现在,这个解决方案确实有效,但它非常笨拙,感觉就像一个 hack,此外,当数组长度超过五个项目时,阅读起来会很痛苦。
我也尝试过更简单的数组,比如
TypeHandler := [ 1, 2, 4, 3 ]
问题仍然存在。
我已经通读了 doc 页面,但没有提到这样的限制。
AHK 连接以逗号开头的行。这在格式化数据方面并不完美,但它确实允许某种级别的多行数组以提高可读性。
转换后的例子:
;First Example
TypeHandler := [{"pattern": "=[0-z]*", "callback": "HandleEIN"}
,{"pattern": "&[0-z]*", "callback": "HandleProduct"}]
;Second (Simplified) Example
arr := [1
,2
,3]
已接受的答案用逗号解释了续行,但我认为值得一提的是,续行也适用于许多其他内容。
A line that starts with "and", "or", ||, &&, a comma, or a period is automatically merged with the line directly above it (in v1.0.46+, the same is true for all other expression operators except ++ and --).
我也绝对认为 continuation sections 值得一提,因为它们真的很酷而且很有用。
只要您了解连续部分的工作原理,您几乎可以根据需要格式化对象。
要获得您希望的格式,您可以这样做:
TypeHandler :=
(Join
[
{"pattern": "=[0-z]*", "callback": "HandleEIN"},
{"pattern": "&[0-z]*", "callback": "HandleProduct"}
]
)
作为奖励,后续部分可以做得非常复杂和酷,只要您知道自己在做什么:
TypeHandler := [{base: b := {__Call: Func("__C")}}.(
(Join),{base:b}.( C
"=[0-z]*", "HandleEIN" ; key,value pairs here
"&[0-z]*", "HandleProduct" ; key being the pattern
"\+[A-z]*", "HandleSmth1" ; value being the callback
"\.[0-7]*", "HandleSmth2")] ; last one needs to end with )]
)
__C(i,_,k,v)
{ return (i, i.pattern := k, i.callback := v, ObjSetBase(i, ""))
}
; show output that it indeed works
for each, type in TypeHandler
outp .= "pattern: " type.pattern " callback: " type.callback "`n"
MsgBox, % outp
我不打算记录这个,因为它有很多复杂的东西,我会说它也很愚蠢,因为它不必要地难以理解。
仅作为示例,连续部分实际上可以是 powerful/cool.
我是 ahk 的新手,我 运行 遇到了一些问题。 无论我尝试什么,我都无法让数组跨越多行。
这是AHK本身的局限性还是我没有正确理解语法?
一个例子:
TypeHandler := [
{"pattern": "=[0-z]*", "callback": "HandleEIN"},
{"pattern": "&[0-z]*", "callback": "HandleProduct"}
]
这被编译器猛烈抨击为第二行不包含可识别的操作,但是当我重新格式化它时它可以正常工作
TypeHandler := [ {"pattern": "=[0-z]*", "callback": "HandleEIN"}, {"pattern": "&[0-z]*", "callback": "HandleProduct"} ]
现在,这个解决方案确实有效,但它非常笨拙,感觉就像一个 hack,此外,当数组长度超过五个项目时,阅读起来会很痛苦。
我也尝试过更简单的数组,比如
TypeHandler := [ 1, 2, 4, 3 ]
问题仍然存在。
我已经通读了 doc 页面,但没有提到这样的限制。
AHK 连接以逗号开头的行。这在格式化数据方面并不完美,但它确实允许某种级别的多行数组以提高可读性。
转换后的例子:
;First Example
TypeHandler := [{"pattern": "=[0-z]*", "callback": "HandleEIN"}
,{"pattern": "&[0-z]*", "callback": "HandleProduct"}]
;Second (Simplified) Example
arr := [1
,2
,3]
已接受的答案用逗号解释了续行,但我认为值得一提的是,续行也适用于许多其他内容。
A line that starts with "and", "or", ||, &&, a comma, or a period is automatically merged with the line directly above it (in v1.0.46+, the same is true for all other expression operators except ++ and --).
我也绝对认为 continuation sections 值得一提,因为它们真的很酷而且很有用。
只要您了解连续部分的工作原理,您几乎可以根据需要格式化对象。
要获得您希望的格式,您可以这样做:
TypeHandler :=
(Join
[
{"pattern": "=[0-z]*", "callback": "HandleEIN"},
{"pattern": "&[0-z]*", "callback": "HandleProduct"}
]
)
作为奖励,后续部分可以做得非常复杂和酷,只要您知道自己在做什么:
TypeHandler := [{base: b := {__Call: Func("__C")}}.(
(Join),{base:b}.( C
"=[0-z]*", "HandleEIN" ; key,value pairs here
"&[0-z]*", "HandleProduct" ; key being the pattern
"\+[A-z]*", "HandleSmth1" ; value being the callback
"\.[0-7]*", "HandleSmth2")] ; last one needs to end with )]
)
__C(i,_,k,v)
{ return (i, i.pattern := k, i.callback := v, ObjSetBase(i, ""))
}
; show output that it indeed works
for each, type in TypeHandler
outp .= "pattern: " type.pattern " callback: " type.callback "`n"
MsgBox, % outp
我不打算记录这个,因为它有很多复杂的东西,我会说它也很愚蠢,因为它不必要地难以理解。
仅作为示例,连续部分实际上可以是 powerful/cool.