У меня есть небольшой тестовый скрипт, подобный этому:

#SingleInstance, off

global gText
global gNum := 0

Gui, Font, s9 cBlack, Tahoma
Gui, Add, Text, w50 center vgText, % "0"
Gui, Add, Button, x+10 gBtnClicked, % "Add one"
Gui Show
return

BtnClicked()
{
    gNum +=1
    GuiControl, , gText, % gNum
}

GuiEscape:
GuiClose:
ExitApp

Это работает следующим образом:

Теперь я хочу инкапсулировать GuiControl в функцию, как метод A ниже:

BtnClicked()
{
    gNum +=1
    SetStaticText(gText, gNum) ;(A) elegant argument
}

SetStaticText(widget, num)
{
    GuiControl, , widget, % num ; but it does NOT work
}

Это не работает. Я точно могу определить проблему, которая заключается в том, что widget не распознается как "имя переменной" для GuiControl.

Итак, я попробовал метод B,

BtnClicked()
{
    gNum +=1
    SetStaticText("gText", gNum) ;(B) ugly argument
}

SetStaticText(widget, num)
{
    GuiControl, , %widget%, % num ; workable
}

Метод Б работает, но он уродлив. Вызывающая сторона вынуждена передавать строку вместо переменной.

Итак, мой вопрос: могу ли я инкапсулировать функцию как метод?

PS: Autohotkey 1.1.24

0