【问题标题】:When to use % or %variable% in AutoHotKey?何时在 AutoHotKey 中使用 % 或 %variable%?
【发布时间】:2020-09-11 20:53:55
【问题描述】:

我已经搜索了很多,但没有找到答案。在 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


    【解决方案1】:

    用双百分号包裹是传统的 AHK,基本上没有必要再使用它了。包装双 % 的唯一原因是被困在过去的时代,或者有人可能会争辩说它在某些情况下写起来更方便,或者其他什么,但我不买它。
    旧语法被表达式语法取代。
    表达式语法更接近于许多其他语言的行为。 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"
    表达式语法中的引号表示我们正在指定一个字符串。

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

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

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

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

    【讨论】:

    • 谢谢你澄清了百分号,但是命令后面的逗号是做什么的?
    • @user3510079 它只是表示您在第一个参数上。第一个逗号是可选的/但在大多数情况下并没有什么不同,如果这就是你要问的意思的话。
    猜你喜欢
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多