標籤:

[基礎] AHK 中 % 符號的用法

AHK 中有一個很特別的符號 %。幾乎隨便從網上下一段 AHK 代碼,就可以看到裡邊有 % 符號,而且 % 在 AHK 里的用法和所有其他編程語言都不一樣,基本靠猜的話是猜不出來的。

用法一:%var%

第一種用法我們在介紹賦值表達式的時候接觸過:

a = 123b = %a%c = %a%456

當用 = 對變數賦值時,如果一個字元串被兩個 % 包圍,並且中間沒有空格,那麼含義是取這個變數的值。

在調用一個命令時,也是這樣。

a = 123MsgBox, %a%

如果我們這樣用,Name, xx, yy,Name 就是命令;如果我們這樣用,Name("xx", "yy"),Name 就是函數。命令和函數的區別我們也會在之後的文章了解到,現在只需要關注命令即可。

注意兩個%之間只能有一個單獨的變數名,像 x[1]、x.y、x[y]、fun() 等一概不支持。

用法二:% var

% 還有另一種用法,這回它只出現一個,並且 % 的後邊有至少一個空格。

a = 123b = % aMsgBox, % a

這樣用表示 % 後邊的內容按表達式來解析。我們可以認為:

b = %a%MsgBox, %a%

b = % aMsgBox, % a

是一樣的,實際上後者更強大一些。

a := 1b := 2c := 3; 計算 a + b + c,結果為 6MsgBox, % 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。

推薦閱讀:

[基礎] AHK 中關聯數組、列表、棧和隊列的用法
AutoHotKey 常用函數或小技巧有哪些分享?
用AutoHotKey按標題隱藏/顯示Windows桌面窗口
[基礎] AHK 中 = 和 := 賦值運算符的用法

TAG:AutoHotkey |