проверка на развернутость функции в скрипте

Здесь выкладываем скрипты
Ответить
Sertik
Сообщения: 628
Зарегистрирован: 15 сен 2017, 09:03

13 мар 2019, 11:10

Коллеги, кто знает, поясните. Как известно, в скриптах Микротик можно использовать функции. Как создавать и удалять "глобальные" функции (определенные как глобальные переменные, известные всем скриптам и терминалу т.е. "всей" РОС) из окружения переменных мы знаем (уже обсуждалось на форуме) ...

У меня такой вопрос, маленький ... Встретил в одном скрипте такой приём проверки функции на определение (т.е. проверки определена ли функция уже - пристутствует ли она в окружении переменных). Это бывает нужно, когда пишется большая библиотека функций и не хочется загружать маршрутизатор не нужными и ошибочными повторными "определениями" ...

Автор писал так:

:global fJParsePrint
:if (!any $fJParsePrint) do={ :global fJParsePrint do={

То есть по смыслу это звучит (вроде !) так: Если функции еще нет в окружении переменных, тогда определяем её ... Если есть - не делаем этого ...

Вопроса собственно два:
1. Правильно я это себе понимаю ?
2. Что такое "!any" в данном выражении ? (В официальном wiki scripts ключевого слова "any" не нашел вообще !). Тыкните носом, пожалуйста ...


Чего не знаем то нагуглим
Sertik
Сообщения: 628
Зарегистрирован: 15 сен 2017, 09:03

25 мар 2019, 15:00

Никто не знает ?


Чего не знаем то нагуглим
Аватара пользователя
podarok66
Модератор
Сообщения: 3230
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

25 мар 2019, 20:52

Я тоже не нашёл. Попробовал сам. Объявляю переменную

Код: Выделить всё

global re;
Начинаю проверку (вторая строка ответ)

Код: Выделить всё

{:global re; :if (!any $re) do={:put "No Global re!"; :set re 2 } else={:put "Global re yes!"}}
No Global re!
Повторяю проверку, но нужно учитывать, что значение переменной изменилось из-за выполнения предыдущего скрипта

Код: Выделить всё

{:global re; :if (!any $re) do={:put "No Global re!"; :set re 2 } else={:put "Global re yes!"}}
Global re yes!
Видимо, это выражение проверяет значение переменной на "непустость" . Самое интересное, что это выражение одинаково реагирует и на nil и на nothing (пустое множество :set re {:} обрабатывается как переменная имеющая значение). Берём на заметку. Спасибо, Sertik!


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Sertik
Сообщения: 628
Зарегистрирован: 15 сен 2017, 09:03

26 мар 2019, 10:34

Это Вам спасибо, podarok66 !

Вы настоящий модератор, не нервный, как некоторые ... (не будем показывать пальцем), а очень приятный в общении человек. Модератор только таким и должен быть.

Удачи Вам во всем и моя дружба как обещал (а она, поверьте, дорогого стоит, для тех кто понимает) ... :-)

P/S Это выражение было мной подмечено в одном скрипте автора Chupakabra (легко гуглиться, статья про JSON-парсер на Микротик на Хабре.
Наводит на мысль, что есть недокументированные многие вещи в Микротик Рос, которые кто-то знает, или как -то раскапывает, но нам компания не сообщает об этом естественно ....
Это собственно обычная практика почти всех разработчиков, чего там обижаться. Капитализм есть капитализм - конкуренция ...мать её ...

Или просто им некогда ... на нас простых смертных время тратить ... тоже вариант :hi_hi_hi:


Чего не знаем то нагуглим
Аватара пользователя
podarok66
Модератор
Сообщения: 3230
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

26 мар 2019, 19:06

Sertik писал(а):
26 мар 2019, 10:34
Вы настоящий модератор, не нервный, как некоторые
Ну вы меня насмешили, право слово. Вы у меня дома или на работе сказали бы такое, вам бы понарассказали про меня "не нервного" :-)
У меня характер взрывной, могу орать на ровном месте, шумлю часто, слыву язвой и матершинником. Раньше ещё и подраться не дурак был. Ща постарел, нет того запала.
Да и нет тут на форуме ситуаций из ряда вон, редко что-то проскочит. А что и вылезает, решается легко.Пока пишу, остываю и начинаю общаться спокойно.
По скрипту, я эту статью читал, мне вроде как для моих маленьких задач такое не нужно. Вот и не обратил внимания на такой приём. А сейчас вот покопался, мне понравилась такая возможность.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Sertik
Сообщения: 628
Зарегистрирован: 15 сен 2017, 09:03

26 мар 2019, 21:09

Ладно, ладно, не скромничайте .... :-) Ну а по нашей жизни даже академики нередко нецензурную лексику вспоминают ... если для дела нужно и помогает - то даже очень хорошее лекарство, то что доктор прописал :-)

Вот лучше скажите есть ли кроме Вики нормальные мануалы то по Микроту - ну должны же быть ... Как сами то фирмачи работают ... Или это государственная тайна Латвии и США ? :-)


Чего не знаем то нагуглим
Sertik
Сообщения: 628
Зарегистрирован: 15 сен 2017, 09:03

27 мар 2019, 00:00

От меня маленький подарочекXX для podarok66

Этот кусочек скрипта я называю "householder". Вы поймете ... Ещё раз Вам спасибо за any ...

:global Rsh;
:foreach i in=[/user active find] do={:if (([/user active get $i name]="admin") && ([/user active get $i via]="winbox")) do={:set $Rsh}}
:if (any $Rsh) do={ ..... }

:-)

Только вот :ny_tik: так не работает и пришлось вот так делать ...

global Rsh "run";
:foreach i in=[/user active find] do={:if (([/user active get $i name]="admin") && ([/user active get $i via]="winbox")) do={:set $Rsh}}
:if ([:len $Rsh]!=0) do={ ..... }

Что то я не допонял any. Это выражение именно значение переменной проверяет на "непустость" получается, а не "объявленность" ?

То есть, если с any, то вероятно вот так нужно было бы писать:

global Rsh "run";
:foreach i in=[/user active find] do={:if (([/user active get $i name]="admin") && ([/user active get $i via]="winbox")) do={:set $Rsh}}
:if (any $Rsh) do={ ..... }

Вчера, просто, уже мозг не варил совсем ...
Последний раз редактировалось Sertik 09 апр 2019, 18:27, всего редактировалось 2 раза.


Чего не знаем то нагуглим
Аватара пользователя
podarok66
Модератор
Сообщения: 3230
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

27 мар 2019, 21:04

Sertik писал(а):
26 мар 2019, 21:09
Вот лучше скажите есть ли кроме Вики нормальные мануалы то по Микроту - ну должны же быть ... Как сами то фирмачи работают ... Или это государственная тайна Латвии и США ? :-)
Чтобы уж совсем нормальные - нет, не встречал. Очень интересно было у Скоромнова, но я что-то потерял ссылку на его Вики-подобный сайт. Но там тоже работы непочатый край. У большинства - решения совсем уж часто встречающихся задач. Для чего-то типа вышеуказаного, как у Чупакабры у большинства не хватает либо знаний ( у меня, допустим) , либо финансовые вопросы важнее стремления к менторству, либо природная лень вошла в силу и гнёт несказанно.
Для терпеливых людей наиболее предпочтительным вижу официальную Вики в качестве основы. Остальное по сусекам по чуть-чуть собирать.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Sertik
Сообщения: 628
Зарегистрирован: 15 сен 2017, 09:03

01 апр 2019, 10:51

Спасибо, что же делать, будет терпеливо собирать по сусекам ...


Чего не знаем то нагуглим
Ответить