何时在 AutoHotKey 中使用 % 或 %variable%?

When to use % or %variable% in AutoHotKey?

我已经搜索了很多,但没有找到答案。在 AutoHotKey 中,我不确定在行首附近使用单个百分号和在两个百分号之间包含变量时的区别。当我使用其中一个或另一个时,我通常会通过反复试验来查找,我希望有人可以阐明其中的区别或解释它的实际作用。

这里有一些实际的例子。

示例 1:我注意到如果您有多个变量和文本,脚本往往会使用前面的百分比。如:

some_val := Clipboard

loop 5
    msgbox % "Index:" . A_Index . ", variable:" . some_val 

例2:我也经常看到这个,有时候好像必须要用。这是真的吗?

some_variable := "test text to send"

Send, %some_variable%

用双百分号包裹是遗留的 AHK,基本上没有必要再使用它了。在过去,用 double % 包裹的唯一理由是被困在后面,或者也许有人会争辩说在某些情况下写起来也更方便,或者别的什么,但我不买账。
遗留语法被表达式语法取代。
表达式语法更接近于许多其他语言的行为。 AHK 遗留语法真是一团糟。

所有旧命令(例如 MsgBox)在每个参数上都使用旧的旧语法(除非另有说明)。
如果您在参数的开头指定 % 后跟 space,您将强制 AHK 计算该参数的表达式,而不是将其作为遗留文本参数读取。
示例:
MsgBox, 5+5 我们使用的是传统命令,我们没有以 % 和 space 开始参数,所以我们使用的是传统语法。 MsgBox 将打印文字文本 5+5 而不是 10.
MsgBox, % 5+5
同样,遗留命令,但现在我们强制 AHK 在此处计算表达式,5+5.
表达式的计算结果将被传递到 MsgBox 命令,MsgBox 将打印 10.
如果我们想让 MsgBox 打印文字文本 5+5,并使用表达式语法来完成它,我们会做 MsgBox, % "5+5".
表达式语法中的引号表示我们正在指定一个字符串。

然后就是知道何时使用表达式语法以及何时使用遗留语法的问题。
默认情况下,您基本上总是处于表达式中。
例如,您可以使用命令或 = 来分配它。
如果您不清楚命令和函数之间的区别,请看这里的示例:
Command, % 7+3, % MyCoolArray[4], % SomeOtherNiceFunction(), % false
Function(7+3, MyCoolArray[4], SomeOtherNiceFunction(), false)
在命令中,我们指定 % 后跟 space 来计算每个参数的表达式,而在函数中,我们不必这样做,因为我们已经在表达式中了。

如果您不清楚 = and :=
之间的区别 = 已遗留且已弃用,它将纯文本分配给变量
:= 将表达式的结果赋值给变量。

这就是我可以从头顶写下来的内容。
如果您有一些更复杂的示例,我可以尝试展示它们。也许将您可能拥有的一些代码转换为表达式语法,使其 100% 摆脱遗留语法。

这里有一个很好的文档页面,您应该阅读一下:
https://www.autohotkey.com/docs/Language.htm