Страница 1 из 1
проверка на развернутость функции в скрипте
Добавлено: 13 мар 2019, 11:10
Sertik
Коллеги, кто знает, поясните. Как известно, в скриптах Микротик можно использовать функции. Как создавать и удалять "глобальные" функции (определенные как глобальные переменные, известные всем скриптам и терминалу т.е. "всей" РОС) из окружения переменных мы знаем (уже обсуждалось на форуме) ...
У меня такой вопрос, маленький ... Встретил в одном скрипте такой приём проверки функции на определение (т.е. проверки определена ли функция уже - пристутствует ли она в окружении переменных). Это бывает нужно, когда пишется большая библиотека функций и не хочется загружать маршрутизатор не нужными и ошибочными повторными "определениями" ...
Автор писал так:
:global fJParsePrint
:if (!any $fJParsePrint) do={ :global fJParsePrint do={
То есть по смыслу это звучит (вроде !) так: Если функции еще нет в окружении переменных, тогда определяем её ... Если есть - не делаем этого ...
Вопроса собственно два:
1. Правильно я это себе понимаю ?
2. Что такое "!any" в данном выражении ? (В официальном wiki scripts ключевого слова "any" не нашел вообще !). Тыкните носом, пожалуйста ...
Re: проверка на развернутость функции в скрипте
Добавлено: 25 мар 2019, 15:00
Sertik
Никто не знает ?
Re: проверка на развернутость функции в скрипте
Добавлено: 25 мар 2019, 20:52
podarok66
Я тоже не нашёл. Попробовал сам. Объявляю переменную
Начинаю проверку (вторая строка ответ)
Код: Выделить всё
{: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!
Re: проверка на развернутость функции в скрипте
Добавлено: 26 мар 2019, 10:34
Sertik
Это Вам спасибо, podarok66 !
Вы настоящий модератор, не нервный, как некоторые ... (не будем показывать пальцем), а очень приятный в общении человек. Модератор только таким и должен быть.
Удачи Вам во всем и моя дружба как обещал (а она, поверьте, дорогого стоит, для тех кто понимает) ...
P/S Это выражение было мной подмечено в одном скрипте автора Chupakabra (легко гуглиться, статья про JSON-парсер на Микротик на Хабре.
Наводит на мысль, что есть недокументированные многие вещи в Микротик Рос, которые кто-то знает, или как -то раскапывает, но нам компания не сообщает об этом естественно ....
Это собственно обычная практика почти всех разработчиков, чего там обижаться. Капитализм есть капитализм - конкуренция ...мать её ...
Или просто им некогда ... на нас простых смертных время тратить ... тоже вариант
Re: проверка на развернутость функции в скрипте
Добавлено: 26 мар 2019, 19:06
podarok66
Sertik писал(а): ↑26 мар 2019, 10:34
Вы настоящий модератор, не нервный, как некоторые
Ну вы меня насмешили, право слово. Вы у меня дома или на работе сказали бы такое, вам бы понарассказали про меня "не нервного"
У меня характер взрывной, могу орать на ровном месте, шумлю часто, слыву язвой и матершинником. Раньше ещё и подраться не дурак был. Ща постарел, нет того запала.
Да и нет тут на форуме ситуаций из ряда вон, редко что-то проскочит. А что и вылезает, решается легко.Пока пишу, остываю и начинаю общаться спокойно.
По скрипту, я эту статью читал, мне вроде как для моих маленьких задач такое не нужно. Вот и не обратил внимания на такой приём. А сейчас вот покопался, мне понравилась такая возможность.
Re: проверка на развернутость функции в скрипте
Добавлено: 26 мар 2019, 21:09
Sertik
Ладно, ладно, не скромничайте ....
Ну а по нашей жизни даже академики нередко нецензурную лексику вспоминают ... если для дела нужно и помогает - то даже очень хорошее лекарство, то что доктор прописал
Вот лучше скажите есть ли кроме Вики нормальные мануалы то по Микроту - ну должны же быть ... Как сами то фирмачи работают ... Или это государственная тайна Латвии и США ?
Re: проверка на развернутость функции в скрипте
Добавлено: 27 мар 2019, 00:00
Sertik
От меня маленький подарочек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={ ..... }
Только вот
так не работает и пришлось вот так делать ...
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={ ..... }
Вчера, просто, уже мозг не варил совсем ...
Re: проверка на развернутость функции в скрипте
Добавлено: 27 мар 2019, 21:04
podarok66
Sertik писал(а): ↑26 мар 2019, 21:09
Вот лучше скажите есть ли кроме Вики нормальные мануалы то по Микроту - ну должны же быть ... Как сами то фирмачи работают ... Или это государственная тайна Латвии и США ?
Чтобы уж совсем нормальные - нет, не встречал. Очень интересно было у Скоромнова, но я что-то потерял ссылку на его Вики-подобный сайт. Но там тоже работы непочатый край. У большинства - решения совсем уж часто встречающихся задач. Для чего-то типа вышеуказаного, как у Чупакабры у большинства не хватает либо знаний ( у меня, допустим) , либо финансовые вопросы важнее стремления к менторству, либо природная лень вошла в силу и гнёт несказанно.
Для терпеливых людей наиболее предпочтительным вижу официальную Вики в качестве основы. Остальное по сусекам по чуть-чуть собирать.
Re: проверка на развернутость функции в скрипте
Добавлено: 01 апр 2019, 10:51
Sertik
Спасибо, что же делать, будет терпеливо собирать по сусекам ...