AutoHotkey中`if ... in`语句是否可与左大括号`{`同行书写且不影响代码运行?
问题原因
AutoHotkey v1 中的if...in属于传统非表达式类条件语句,存在两个强制语法限制:
in关键字后的匹配列表仅支持纯文本逗号分隔格式,同一行内跟在列表后的所有内容都会被识别为匹配项的一部分,所以第一种写法里同行的{会被算入匹配列表,导致条件永远不成立- 括号包裹的判断逻辑属于表达式语法,而
in不是AHK v1的合法表达式运算符,所以第二种括号写法会直接报语法错误
两种合规的统一格式解决方案
方案1:全代码块统一使用大括号换行风格
所有if、else语句的左大括号都单独占一行,完全符合if...in的语法要求,格式统一无冲突:
Var := "Var" if Var in Foo,Bar,Baz { MsgBox statement 1 MsgBox statement 2 } else { MsgBox statement 3 MsgBox statement 4 }
方案2:改用表达式写法实现同等逻辑,支持大括号同行
如果你习惯左大括号和语句同行的代码风格,可以用InStr函数拼接分隔符的方式替代if...in,属于表达式类条件判断,完全支持同行写大括号:
Var := "Var" ; 前后加逗号是为了避免部分匹配的问题,比如匹配"Bar"不会误命中"Bar1" if InStr(",Foo,Bar,Baz,", "," Var ",") { MsgBox statement 1 MsgBox statement 2 } else { MsgBox statement 3 MsgBox statement 4 }
补充说明
如果你使用的是AutoHotkey v2版本,if...in语法已被官方废弃,所有条件判断统一使用表达式写法,不存在上述格式冲突问题。
内容的提问来源于stack exchange,提问作者Wenfang Du
相关产品推荐
相关产品推荐

