1

スクリプトは、2 つのパラメーター値をスクリプトの別のインスタンスに渡します。したがって、組み込みパラメーター変数 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も同様に宣言する必要があります。

これを行っても、式を扱い、式でそれらを使用するための構文がない:=ため、それらを変数に割り当てるために使用することはできません(通常、変数は変数名だけで式で参照され、明らかに ; は使用されません)。変数ではなく実際の数値として解釈されます) 。:=%%12

于 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 に答える