首页 > 解决方案 > 何时在 AutoHotKey 中使用 % 或 %variable%?

问题描述

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

这里有一些例子。

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

some_val := Clipboard

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

示例 2:我也经常看到这个,有时似乎必须使用它。这是真的?

some_variable := "test text to send"

Send, %some_variable%

标签: autohotkey

解决方案


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

所有旧命令(例如 MsgBox)在每个参数上都使用旧的旧语法(除非另有说明)。
如果您%在参数的开头指定了一个空格,那么您将强制 AHK 评估该参数上的表达式,而不是将其作为旧文本参数读取。
示例:
MsgBox, 5+5 我们使用的是传统命令,我们没有以 a%和空格开头的参数,所以我们使用的是传统语法。MsgBox 将打印文字文本5+5而不是10.
MsgBox, % 5+5
再次,遗留命令,但现在我们强制 AHK 在这里计算一个表达式,5+5.
表达式的评估结果将被传递给 MsgBox 命令,并且 MsgBox 将打印10
如果我们想要 MsgBox 打印文字 text 5+5,并使用表达式语法来做到这一点,我们会做MsgBox, % "5+5".
表达式语法中的引号意味着我们正在指定一个字符串。

那么问题来了,要知道何时使用表达式语法,何时使用旧语法。
默认情况下,你基本上总是在一个表达式中。
您可以通过例如使用命令或=分配来离开它。
如果您不清楚命令和函数之间的区别,这里有一个示例:
Command, % 7+3, % MyCoolArray[4], % SomeOtherNiceFunction(), % false
Function(7+3, MyCoolArray[4], SomeOtherNiceFunction(), false)
在命令中,我们指定了一个%后跟一个空格来计算每个参数的表达式,而在函数中,我们不必这样做是因为我们已经在一个表达式中。

如果您不清楚 and 之间的区别=:=
=是旧版和已弃用,它将纯文本分配给变量
:=,将表达式的结果分配给变量。

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

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


推荐阅读