本节中主要专注于 AutoHotkey 中容易引起困惑的传统形式和表达式两种风格,进行比较并提供一些建议,以尽可能去除在学习或使用过程中的困惑。
一、为什么会存在容易引起误解的两种风格呢?
AutoHotkey 最初参照自典型命令式语言 AutoIt v2,这是传统型存在的历史原因,因为有些情况下传统型无法解决,在演化过程中增加了表达式型,所以目前形成并存的局面。
二、传统形式赋值与表达式形式赋值
运算符章节,我们还记得赋值运算符有两种形式,其实,根源也在这里。
str = 这是个字符串。 ; 传统赋值
str := "这是个字符串。" ; 表达式赋值
上面这两个赋值语句是等效的,可以看到传统赋值在变量名后使用等号接着是作为赋值内容的字符串。而表达式赋值使用冒号等号,后面的赋值内容括在引号中。看起来似乎传统赋值简单一些,这里确实如此,然而它只适用于赋值字符串、数字、变量或它们组合的内容,并且在包含变量时变量名称必须括在百分号中。
str = 这是个字符串,后面跟着 Var 变量的内容:%var%
str := "这是个字符串,后面跟着 Var 变量的内容:" var
上例可以发现传统赋值和表达式赋值复杂度上接近,如果只赋值变量,显然表达式方式简单了。它们的区别主要不在这里,请看这个例子:
var = 1 + 1 ;"1+1"
var := 1 + 1 ;2
保存为脚本,运行看看结果。这里说明了它们的主要区别,表达式赋值时可以进行运算,操作数可以为数字、字符串、函数调用等。这种情况时无法用传统形式代替。
如果能明确它们的区别,可以两者都用。如果担心会混淆,那么建议采用表达式赋值。
三、If 传统型与 If 表达式型
; 传统形式
if Var =
MsgBox, 变量 Var 为空。
; 表达式形式
if (Var = "")
MsgBox, 变量 Var 为空。
这章节好短
这个部分重要,但是并不难就少一些