У меня проблемы при использовании операторов if , else if внутри функций, они не распознают мои переменные, несмотря на то, что я установил их в global в начале скрипта ...

global AR4toolCur :=
global AR4psetCollCurY :=
global AR4psetCollCurYselect :=
global AR4psetCollCurYfill :=
global AR4psetCollCurYeraser :=
global AR4psetCollCurYknife :=

~l::
AR4toolCur := "Selection"   ; means the current selected tool
return




AR4psetCollCurYperToolSelFn()    ; Sel means Select, I want to pass the value of AR4psetCollCur*NameOfTheTool* to AR4psetCollCurY
{
    msgbox, AR4psetCollCurYperToolSelFn will run`nAR4toolCur = %AR4toolCur%
    If (%AR4toolCur% := "Selection")    ; this pass the value of AR4psetCollCur*NameOfTheTool* (in this case "select") to AR4psetCollCurY
        AR4psetCollCurY := AR4psetCollCurYselect
    Else If (%AR4toolCur% := "Fill")
        AR4psetCollCurY := AR4psetCollCurYfill
    Else If (%AR4toolCur% := "Eraser")
        AR4psetCollCurY := AR4psetCollCurYeraser
    Else If (%AR4toolCur% := "Knife")
        AR4psetCollCurY := AR4psetCollCurYknife
    msgbox, AR4psetCollCurY = %AR4psetCollCurY%
return
}

эта функция выше работает.

Мой дырочный скрипт запускает эту функцию выше, чтобы передать значение AR4psetCollCur*NameOfTheTool* (текущий выбранный инструмент) в AR4psetCollCurY затем изменить значение AR4psetCollCurY и использовать его в качестве параметра другой функции, а затем оно должно сохранить измененное значение AR4psetCollCurY в AR4psetCollCur*NameOfTheTool* , поэтому я использую эту функцию ниже, но она не работает, она всегда видит %AR4toolCur% как пустой, почему это так?

AR4psetCollCurYperToolStrFn()
{
    msgbox, AR4psetCollCurYperToolStrFn will run`nAR4toolCur = %AR4toolCur%
    If (%AR4toolCur% := "Selection")
        AR4psetCollCurYselect := AR4psetCollCurY
    Else If (%AR4toolCur% := "Fill") ; I have tried    AR4toolCur = Fill   it doesn't work either
    {
        AR4psetCollCurYfill := AR4psetCollCurY
        msgbox, AR4psetCollCurYfill = %AR4psetCollCurYfill%
    }
    Else If (%AR4toolCur% := "Eraser")
        AR4psetCollCurYeraser := AR4psetCollCurY
    Else If (%AR4toolCur% := "Knife")
        AR4psetCollCurYknife := AR4psetCollCurY
return
}

Спасибо, Дополнительно.

1 ответ1

0

У меня проблемы при использовании операторов if, else if внутри функций, они не распознают мои переменные, несмотря на то, что я установил их в global в начале скрипта ...

Вы полагаете, что проблема связана с утверждениями if/else if, однако данные указывают на проблемы с локальными / глобальными переменными.

Вам необходимо определить переменную как глобальную, внутри функции, чтобы ссылаться на глобальную версию переменной (а не на локальную версию переменной).

Пример кода:

^q::
vText := "hello" ;the global version of vText
Func1()
Func2()
Func3()
Return

Func1()
{
MsgBox %vText% ;the function's local version of vText is blank
Return
}

Func2()
{
global vText
MsgBox %vText% ;the function uses the global version of vText
Return
}

Func3()
{
global
MsgBox %vText% ;the function uses the global versions for all variables
Return
}

Замечания:
Строки 'if' должны иметь форму:

If (AR4toolCur = "Selection")

не:

If (%AR4toolCur% := "Selection")

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .