Что нового

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

ynbIpb

Скриптер
Сообщения
398
Репутация
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 706
Можно с помощью функции Call():

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


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

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

ynbIpb

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

Yashied

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

Код:
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 706
Если ты в последствии переименуешь функцию, но при этом оставишь Call(...), то тебе будет очень сложно найти ошибку, Call() не вызовет ошибку выполнения. А теперь представь, что у тебя программа состоит из 5000 и более строк, и куча функций вызывается посредством Call(). Кроме всего прочего это будет работать медленнее, чем прямой вызов функции.
 
Автор
Y

ynbIpb

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

ynbIpb

Скриптер
Сообщения
398
Репутация
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 551
Репутация
328
Vovsla
Предупреждение Сообщения нужно оформлять правильно! Использовать тег AutoIT :mad:
 
Верх