AHK 中有一個很特別的符號 %。幾乎隨便從網上下一段 AHK 代碼,就能夠看到裏邊有 % 符號,並且 % 在 AHK 裏的用法和全部其餘編程語言都不同,基本靠猜的話是猜不出來的。編程
第一種用法咱們在介紹賦值表達式的時候接觸過:微信
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() 等一律不支持。code
% 還有另外一種用法,這回它只出現一個,而且 % 的後邊有至少一個空格。ip
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。