Что нового

Обращение разных функций к одной функции

SeMgA

Новичок
Сообщения
47
Репутация
0
Добрый день, я не совсем понимаю как это называется и уверен, что где - то на форуме есть ответ на этот вопрос, но не знаю как искать.
Вопрос такой, скажите пожалуйста представим что у нас есть 3 функции:
Функция 1 и 2 обращаются в функцию Тест,
Код:
Func 1()
   Test()
EndFunc

Func 2()
   Test()
EndFunc

Func Test()
ConsoleWrite("Bla, bla,bla")
EndFunc

Как можно реализовать возврат из функции Тест в функцию которая обращалась к нему(То есть если обращалась 1 возврат в 1, 2 значит возврат 2).
Спасибо
 

FlatX007

Tattoo!
Сообщения
197
Репутация
35
я так понял
Код:
MsgBox(0,"Функция вернула значение :", _1())
MsgBox(0,"Функция вернула значение :", _2())
MsgBox(0,"Функция вернула значение :", _Test())

Func _1()
   _Test()
   ConsoleWrite("Это была функция 1")
   Return "Это была функция 1"
EndFunc

Func _2()
   _Test()
   ConsoleWrite("Это была функция 2")
    Return "Это была функция 2"
EndFunc

Func _Test()
ConsoleWrite("Bla, bla,bla")
Return "Bla, bla,bla"
EndFunc
 
Автор
S

SeMgA

Новичок
Сообщения
47
Репутация
0
Добрый день нет возможности проверить, но смысл в том, например нужно нажать в функции 1, 2, 3 ...... например кнопку 1 или вызвать бла бла бла, но это есть в функции ТЕСТ, вот чтоб не делать 101 функцию ТЕСТ
Например я делал раньше так:

Код:
Func 1()
   if $i = 1
      test()
      EndIf
  
EndFunc

Func test()
   ConsoleWrite("1")
   1()
EndFunc

Func 3()
   if $i = 1
      test3()
      EndIf
  
EndFunc

Func test3()
   ConsoleWrite("1")
   3()
EndFunc
Func 2()
   if $i = 1
      test2()
      EndIf
  
EndFunc

Func test2()
   ConsoleWrite("1")
   2()
EndFunc

По идее можно сделать всего 1 тест, чтоб он возвращался к функции которая к нему обратилась, простите что так пишу, я понимаю чего хочу, но не знаю как это описать
 

gunter123

Продвинутый
Сообщения
159
Репутация
69
Можно в функцию _Test передавать название функции, из которой вызываем ее. Но это вообще неправильный подход.

Код:
_1()
_2()

Func _1()
   ConsoleWrite('Call _1' & @CRLF)
   _Test('_1')
EndFunc

Func _2()
   ConsoleWrite('Call _2' & @CRLF)
   _Test('_2')
EndFunc

Func _Test($sFunc)
   ConsoleWrite('Call _Test, $sFunc = ' & $sFunc & @CRLF)
   If Random(0, 1) < 0.5 Then Call($sFunc) ; С шансом 50% вызываем функцию, из которой вызвали _Test
EndFunc

Сообщение автоматически объединено:

Правильнее будет создать функцию, содержащую вызов функции _Test и вызывающую саму себя

Код:
_1()
_2()

Func _1()
   ConsoleWrite('Called _1' & @CRLF)
   _Test()
   If Random(0, 1) < 0.5 Then _1()     ; Рекурсивный вызов функции
EndFunc

Func _2()
   ConsoleWrite('Called _2' & @CRLF)
   _Test()
   If Random(0, 1) < 0.5 Then _2()    ; Рекурсивный вызов функции
EndFunc

Func _Test()
   ConsoleWrite('Called _Test' & @CRLF)
EndFunc
 
Последнее редактирование:
Автор
S

SeMgA

Новичок
Сообщения
47
Репутация
0
Отличный пример, спасибо!
 
Верх