Код: Выделить всё
:global TestFunction do={
:if ($1="recursive") do={
:global TestFunction
[$TestFunction]
:put "recursive call"}
:put OK
}
а если протестируем наш рекурсивный вызов [$TestFunction recursive], то получим "recursive call" и "OK"
Мне стало интересно, можно ли вызвать функцию рекурсивно не указывая её явного имени, ведь мы знаем, что функция - это всегда массив и её имя хранится в первом элементе этого массива $0. Только вот беда, хранится там оно ещё и с префиксом "$" (зачем - это к разработчикам Микротик)
Так вот, после танцев с бубнами (то есть танцев с :parse) и отсечения префикса $ с помощью :pick, оказалось, что можно:
Код: Выделить всё
:global AnyName do={
:if ($1="test") do={
[[:parse [:parse ":global [:pick \$$0 1 [:len \$$0]]"]]];
[[:parse [:parse "[:pick \$$0 1 [:len \$$0]]"]]]
:put "Recursive call without mentioning the function name works"}
:put OK
}