如何在 AutoHotkey 中传播变量?

问题描述 投票:0回答:2

在 JavaScript 中,我们使用 spread 运算符 来扩展项目数组,例如

const arr = [1, 2, 3]

console.log(...arr) // 1 2 3

我想在AHK中实现类似的效果:

Position := [A_ScreenWidth / 2, A_ScreenHeight]

MouseMove Position ; 👈 how to spread it?
javascript arrays variables autohotkey spread-syntax
2个回答
0
投票

AFAIK,AHK 中没有扩展语法,但有一些替代方法:

对于大数组,您可以使用:

position := [A_ScreenWidth / 2, A_ScreenHeight]
Loop,% position.Count()
    MsgBox % position[A_Index] ; show a message box with the content of any value

position := [A_ScreenWidth / 2, A_ScreenHeight]
For index, value in position
    MsgBox % value ; show a message box with the content of any value

在您的示例中,可以是:

position := [A_ScreenWidth / 2, A_ScreenHeight]
MouseMove, position[1], position[2]

这会将您的鼠标移动到屏幕的底部中间。

为了避免小数,您可以使用

Floor()
Round()
Ceil()
函数,例如:

position := [ Floor( A_ScreenWidth / 2 ), Round( A_ScreenHeight ) ]
Loop,% position.Count()
    MsgBox % position[A_Index] ; show a message box with the content of any value

0
投票

v1 和 v2 中都有

arr*

substrings := ["one", "two", "three"]
MsgBox Join("`n", substrings*)

https://www.autohotkey.com/docs/v2/Functions.htm#VariadicCall

  • 注意: 支持

    MyFunc(x, y*)
    ,但不支持
    MyFunc(x*, y)

  • ; either
    arr3 := [arr1*]
    arr3 := [arr2*]
    

    您会考虑增强点差算子吗? - AutoHotkey Community https://www.autohotkey.com/boards/viewtopic.php?style=8&t=132684

  • (
    再说一遍,ahk 中的术语命名在很多方面都与其他编程语言中的常规名称不同,
    例如:
    胖箭头函数==lamba func;
    延续部分==多行字符串;
    文档确实描述了它们,但没有充分发挥潜力......
    例如:
    您可以使用多行 lambda func,但需要

    ()
    来包装 func 主体;
    还有其他语法来指定多行字符串,即
    latex_Vector := ("   ")

    也许它们只是实施得很薄弱
    )

© www.soinside.com 2019 - 2024. All rights reserved.