1

该脚本将两个参数值传递给脚本的另一个实例。所以内置参数变量 0 包含传递参数的数量。1 在下面的示例“C:/Windows”中,2 是“/switchtest”

可以使用函数外部的传统方法(使用单个等号)将参数值分配给 strParam1 和 strParam2。但是,在函数内部,分配失败。

如果将它们分配在带有 := 符号的循环中,它似乎可以工作。

为什么?任何人都可以解释这种行为吗?

strParam1 = %1%
strParam2 = %2%
msgbox, 64, Outside the Function, number of parameters:%0%`npath: %strParam1%`nswitch: %strParam2%
test_params()


strPath := "C:/Windows"
strSwitch := "/switchtest"
RunWait "%A_AhkPath%" "%A_ScriptFullPath%" "%strPath%" "%strSwitch%"


test_params() {
    global 0

    ; this works
    ; loop %0%
        ; strParam%A_Index% := %A_Index%

    ; this causes an error: "This dynamic variable is blank. If this variable was not intended to be dynamic, remove the % symbols from it."
    ; strParam1 := %1%
    ; strParam2 := %2%

    ; this passes empty values; however, this method works outside the function.
    strParam1 = %1%
    strParam2 = %2%

    msgbox, 64, Inside the Function, number of parameters:%0%`npath: %strParam1%`nswitch: %strParam2%
    if strParam2
        exitapp

}
4

2 回答 2

1

你有正确的想法global 0;允许 %0% 从顶层进入函数。你也只需要声明global 1, 2

即使这样做,也不能使用:=将它们分配给变量,因为:=处理表达式并且没有在表达式中使用它们的语法(通常在表达式中仅使用变量名称来引用变量,而没有%%; 显然1并被2解释为实际数字而不是变量)。

于 2012-11-13T22:55:10.703 回答
0

@echristopherson 回答了这个问题,但我想提出一个解决方法。这假设您正在使用 AutoHotkey_L。

如果您使用参数“ab c”运行测试脚本,它会为您提供这个。

3
1, a
2, b
3, c

考试:

argv := args()
test := argv.MaxIndex() "`n"

for index,param in argv
    test .= index ", " param "`n"

MsgBox % test

和功能:

args() {
    global
    local _tmp, _out

    _out := []

    Loop %0% {
        _tmp := %A_Index%
        if _tmp
            _out.Insert(_tmp)
    }

    return _out
}
于 2012-11-14T05:56:16.767 回答