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

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。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,076評論 25 708
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,869評論 18 139
  • 為什么我想要的總會離我遠去,為什么讓我經歷一次次的失望,我不想嘗試第二次、我想告訴你,我不想你離開,卻沒有勇氣告訴你。
    嘴角一抹冷笑閱讀 160評論 0 0
  • 楷媽檸檬膏另一主打產品,每天都在出單這個季節的必備品! 如果你家里有老人、孩子總是反復上火、感冒、咳嗽、有痰、便秘...
    禪無憂草閱讀 507評論 0 0
  • 上大學前,他發誓要好好學習,可一進校門,又放松了對自己的要求。誤樂,網購等一些無關重要的事占去了他的學習時間,...
    軍玲閱讀 250評論 0 0