Возврат глобальной переменной, использование строки в качестве имени переменной - PullRequest
0 голосов
/ 15 марта 2019

У меня есть функция с именем fillUI(), основная цель которой - заполнить созданный пользовательский интерфейс.В моем оригинальном сценарии мне нужно пройти более 20 элементов управления редактированием и заполнить их содержимым.Содержимое хранится в массиве.

Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как «вернуть» глобальную переменную с содержимым, имя переменной которого составлено из строки.

Это как сказать, myVar1 := "Hello World" - это исходная переменная.Затем я указываю на эту переменную с помощью varName := "myVar1", а затем изменяю ее на varName := "foobar", но myVar1 все равно будет Hello World в конце ..

Возможна ли такая вещь?

; Start of script
#SingleInstance Force

FillUI()

Gui, Add, Edit, x12 y9 w350 h30 , %Text_1%
Gui, Add, Edit, x12 y89 w350 h30 , %Text_2%
Gui, Add, Edit, x12 y159 w350 h30 , %Text_3%

Gui, Show, w390 h278, Code testing
return

FillUI() {
    words := {1:"Hello World",2:"foobar",3:"lorem ipsum"}

    i := 1
    while(i <= words.MaxIndex()) {
        global variable_name := "Text_" i
        word := words[i]

        ; I need to return a variable here whose variable name needs to be something like "Text_X" and whose content is %word%
        ; This is in order to fill the UI above
        ;
        ; Is this achievable?
        variable_name := word
        i++
    }
}

GuiClose:
    ExitApp
return

; End of script

1 Ответ

1 голос
/ 15 марта 2019

Это один из подходов.global в начале скрипта объявляет все переменные, которые используются в этом скрипте, как глобальные, следовательно, переменные, которые используются только внутри функции FillUI (), объявляются с использованием local

; Start of script
#SingleInstance Force

FillUI()

Gui, Add, Edit, x12 y9 w350 h30 , %Text_1%
Gui, Add, Edit, x12 y89 w350 h30 , %Text_2%
Gui, Add, Edit, x12 y159 w350 h30 , %Text_3%

Gui, Show, w390 h278, Code testing
return

FillUI() {
    global
    local words := {1:"Hello World",2:"foobar",3:"lorem ipsum"}

    local i := 1
    while(i <= words.MaxIndex()) {


        word := words[i]
     ;I need to return a variable here whose variable name needs to be something like "Text_X" and whose content is %word%
        ; This is in order to fill the UI above
        ;
        ; Is this achievable?
        Text_%i% := word

        i++
    }
}

GuiClose:
    ExitApp
return
...