Что нового

Как сформировать имя запускаемой функции используя переменные?

ynbIpb

Скриптер
Сообщения
399
Репутация
109
Вот задался таким вопросом, есть у меня несколько функций, их названия различаются лишь на 1 символ (цифру). Чтобы вызвать нужную функцию её имя нужно писать целиком, а вот как сделать чтоб часть этого имени можно было бы формировать из переменной и запускать? Возможно ли вообще такое? Как мне это представляется:
Код:
For $i=1 to 4
myfunc_&$i()
Next

Func myfunc_1()
MsgBox (0,"","Func 1")
EndFunc

Func myfunc_2()
MsgBox (0,"","Func 2")
EndFunc

Func myfunc_3()
MsgBox (0,"","Func 3")
EndFunc

Func myfunc_4()
MsgBox (0,"","Func 3")
EndFunc
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Можно с помощью функции Call():

Код:
Call("myfunc_" & $n)


но грамотнее это сделать при помощи передачи в функцию параметра, например

Код:
Func myfunc($n)
    MsgBox(0, "", "Func " & $n)
EndFunc   ;==>myfunc
 
Автор
ynbIpb

ynbIpb

Скриптер
Сообщения
399
Репутация
109
Call Вот оно точно! что-то я подзабыл про её существование...
Спасибо.
но грамотнее это сделать при помощи передачи в функцию параметра
Это тоже вариант, просто функции огромные и подгонять их все под одну тяжело, хотя было бы оптимизированнее, наверное попробую через параметр.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Не стоит злоупотреблять этой функцией. Я рекомендую тебе сделать следующее:

Код:
Func _Splitter($n)
    Switch $n
        Case 1
            _MyFunc1()
        Case 2
            _MyFunc2()
        Case 3
            _MyFunc3()
    EndSwitch
EndFunc   ;==>_Splitter

Func _MyFunc1()
EndFunc   ;==>_MyFunc1

Func _MyFunc2()
EndFunc   ;==>_MyFunc2

Func _MyFunc3()
EndFunc   ;==>_MyFunc3
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Если ты в последствии переименуешь функцию, но при этом оставишь Call(...), то тебе будет очень сложно найти ошибку, Call() не вызовет ошибку выполнения. А теперь представь, что у тебя программа состоит из 5000 и более строк, и куча функций вызывается посредством Call(). Кроме всего прочего это будет работать медленнее, чем прямой вызов функции.
 
Автор
ynbIpb

ynbIpb

Скриптер
Сообщения
399
Репутация
109
Понятно, ну вобщем вся ответственность на мои плечи.
А то я уж думал может какие баги с ней связаны.
Скорость не очень важна.
Спасибо за множество вариантов.
 
Автор
ynbIpb

ynbIpb

Скриптер
Сообщения
399
Репутация
109
Как сформировать имя переменной используя переменные?

Опять я в старую тему.
Гдето в голове крутится, но не могу вспомнить как формировать имя переменной из двух кусков? Что-то типа этого:
Код:
$value1 = "текст с переменной 1"
$i = $value & "1"
MsgBox (0, "", $i)


----------------------
упс. всё нашёл:
Код:
$value1 = "текст с переменной 1"
$i= Eval ("value" & "1")
MsgBox (0, "", $i)
 

vovsla

Осваивающий
Сообщения
546
Репутация
26
у меня в одной проге номера кнопок генерятся так
$ButtonNum=$ButtonNum+1
$Label[$ButtonNum] = GUICtrlCreateLabel($Name, 360, $Top, 220, 20,
GUICtrlSetOnEvent(-1, "LabelClick"&$ButtonNum)

Func LabelClick1()
EndFunc

Func LabelClick2()
EndFunc

и т.д.

т.е. "функция"&$номер
Func функцияномер()
EndFunc
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1 573
Репутация
334
Vovsla
Предупреждение Сообщения нужно оформлять правильно! Использовать тег AutoIT :mad:
 
Верх