AHK 中有一個很特別的符號 %。幾乎隨便從網上下一段 AHK 代碼,就可以看到里邊有 % 符號,而且 % 在 AHK 里的用法和所有其他編程語言都不一樣,基本靠猜的話是猜不出來的。
用法一:%var%
第一種用法我們在介紹賦值表達式的時候接觸過:
a = 123
b = %a%
c = %a%456
當用 = 對變量賦值時,如果一個字符串被兩個 % 包圍,并且中間沒有空格,那么含義是取這個變量的值。
在調用一個命令時,也是這樣。
a = 123
MsgBox, %a%
如果我們這樣用,Name, xx, yy
,Name 就是命令;如果我們這樣用,Name("xx", "yy")
,Name 就是函數。命令和函數的區別我們也會在之后的文章了解到,現在只需要關注命令即可。
注意兩個%之間只能有一個單獨的變量名,像 x[1]、x.y、x[y]、fun() 等一概不支持。
用法二:% var
% 還有另一種用法,這回它只出現一個,并且 % 的后邊有至少一個空格。
a = 123
b = % a
MsgBox, % a
這樣用表示 % 后邊的內容按表達式來解析。我們可以認為:
b = %a%
MsgBox, %a%
和
b = % a
MsgBox, % a
是一樣的,實際上后者更強大一些。
a := 1
b := 2
c := 3
; 計算 a + b + c,結果為 6
MsgBox, % a + b + c
; 語法錯誤
; MsgBox, %a + b + c%
; 語法正確,但 + 失去計算功能,變成了字符串的一部分
; MsgBox, %a% + %b% + %c%
如果 % 后邊不只是一個變量名,而是一個表達式,那么“用法二”有效,“用法一”無效。
使用“用法一”還是“用法二”
我們發現“用法一”和“用法二”的功能上是有重疊的,那么實際情況應該怎么用呢?這個還是因人而異,盡量前后一致即可。但在某些場景“用法一”更方便,某些情況“用法二”更方便,甚至只能用“用法二”。
“用法一”更方便的場景:
; 變量本身包含雙引號等特殊字符
c = "%a% %b%"
; 多行字符串中包含變量
c =
(
xxx
%a%
%b%
)
“用法二”更方便的場景:
; 字符串中的變量居多
MsgBox, % a " " b " " c " " d
只能用“用法二”的場景:
; 需要使用表達式
MsgBox, % a + b - c
另外如果考慮性能的話,“方法一”是要比“方法二”快二分之一到一倍的,但一般情況瓶頸不應該出現在這里,所以也不用過多在乎性能問題,如果真的是因為在很大的循環里使用而產生性能問題,修改一下也是很輕松的事情。
付費解決 Windows、Linux、Shell、C、C++、AHK、Python、JavaScript、Lua 等領域相關問題,靈活定價,歡迎咨詢,微信 ly50247。