Autohotkey 何时在自动热键中使用%或%变量%?

Autohotkey 何时在自动热键中使用%或%变量%?,autohotkey,Autohotkey,我到处找了不少,但没有找到答案。在AutoHotKey中,我不确定在行首附近使用单个百分比时与在两个百分比符号之间包含变量时的差异。我通常使用试错法来发现,当我使用其中一种方法时,我希望有人能解释一下区别是什么,或者解释一下它到底在做什么 下面是一些实际的例子 示例1:我注意到,如果文本中有多个变量,脚本倾向于使用前面的百分比。例如: some_val := Clipboard loop 5 msgbox % "Index:" . A_Index . ", variable:" . s

我到处找了不少,但没有找到答案。在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
%%
的唯一原因是,在旧时代,人们可能会认为,在某些情况下,使用double
%
写作更方便,但我不买账。
传统语法被表达式语法取代。
表达式语法与许多其他语言的行为更接近。AHK遗留语法真是一团糟

所有传统命令(例如MsgBox)在每个参数上都使用旧的传统语法(除非另有规定)。
如果指定一个
%
,然后在参数开头加一个空格,则强制AHK对该参数上的表达式求值,而不是将其作为旧文本参数读取。
示例:
MsgBox,5+5
我们使用的是一个遗留命令,我们没有用
%
和空格来启动参数,所以我们使用的是遗留语法。MsgBox将打印文本
5+5
,而不是
10

MsgBox,%5+5

同样是遗留命令,但现在我们强制AHK在这里计算表达式,
5+5

表达式的计算结果将传递到MsgBox命令,MsgBox将打印
10

如果我们想让MsgBox打印文本
5+5
,并使用表达式语法,我们可以使用
MsgBox、%“5+5”

表达式语法中的引号表示我们正在指定字符串

那么,还有一个问题,就是要知道什么时候使用表达式语法,什么时候使用传统语法。
默认情况下,您基本上总是在表达式中。
例如,您可以通过使用命令或
=
分配来保留它。
如果您不清楚命令和函数之间的区别,下面是一个示例:
命令,%7+3,%mycolarray[4],%SomeOtherNiceFunction(),%false

函数(7+3,mycolarray[4],SomeOtherNiceFunction(),false)

在命令中,我们指定了一个
%
,后跟一个空格来计算每个参数的表达式,在函数中,我们不必这样做,因为我们已经在表达式中了

如果您不清楚和之间的区别,
=
是旧式且不推荐使用的,它将纯文本分配给变量
:=
将表达式的结果赋给变量

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

这里有一个关于文档的好页面,您应该阅读:

谢谢你澄清了百分号,但是命令后面的逗号在做什么?@user3510079它只是表示你在使用第一个参数。第一个逗号是可选的/在大多数情况下没有区别,如果你问的是这个意思的话。