Что нового

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

SeMgA

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

Func 2()
   Test()
EndFunc

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

Medic84

Омега
Команда форума
Администратор
Сообщения
1 553
Репутация
328
В смысле возврат?
Код:
Func 1()
   Test()
   ConsoleWrite("Это была функция 1")
EndFunc

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

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


В чем проблема давайте подробнее.
 

FlatX007

Tattoo!
Сообщения
193
Репутация
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
 

xXx

Меценат
Меценат
Сообщения
105
Репутация
33
.. а я так:
Код:
_1()
_2()

Func _1()
    $sVar = Test()
    MsgBox(262144, Default, 'Это "Func _1()"' & @CR & '$sVar = ' & $sVar)
EndFunc   ;==>_1

Func _2()
    $sVar = Test()
    MsgBox(262144, Default, 'Это "Func _2()"' & @CR & '$sVar = ' & $sVar)
EndFunc   ;==>_2

Func Test()
    Return "Bla, bla,bla"
EndFunc   ;==>Test
 

FlatX007

Tattoo!
Сообщения
193
Репутация
35
Кажется так :smile: исходя из загадки шарады
Код:
_1()

Func _1()
  MsgBox(0,"Функция _Test  вернула значение :" & _Test()) 
EndFunc

Func _Test() 
Return "бла бла“
Endfunc
 
Автор
S

SeMgA

Новичок
Сообщения
42
Репутация
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

Продвинутый
Сообщения
138
Репутация
55
Можно в функцию _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

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