Найден новый тип даных РоутерОС "op"

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

https://forum.mikrotik.com/viewtopic.php?t=170591

:put [:typeof (>[])]
Return: «op» (ведет себя как «код»)


:global optype (>[:global z "blah"])
$optype
:put $z
# "blah"

Even can be a function with params using :do...
Code: Select all
:global optype (>[:do {:put "$1"}])

:put [:typeof $optype]
# op

$optype "hmm"
# hmm

:put $optype
# (evl (evl /docommand=;(evl (evl /putmessage=$1))))

Or with (>{}) it's an empty array...
Code: Select all
:global shortThanToArray (>{})
:put "$shortThanToArray $[:typeof $shortThanToArray] $[:len $shortThanToArray]"
# array 0


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
Brook
Сообщения: 127
Зарегистрирован: 24 май 2022, 00:29

Найти бы такой тип данных, который сможет развернуть функцию из такого вида

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

(evl (evl /docommand=;(evl (evl /putmessage=$1))))
Не проверяли случаем?


Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

Разумеется это самый интересный вопрос !
Похоже не может.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

Написал Вам Brook небольшое послание в личку


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

БЕРЁМ на ЗАМЕТКУ !

Гуру оффорума Rextended раскопал, что возможно тип "op" вероятно означает сокращенно "only pointer" (только указатель) и служит в основном для сокращения записи указателей к сложным вложенным элементам массивов в скриптовом языке РоутерОС https://forum.mikrotik.com/viewtopic.php?t=197255.

Это наглядно показывают следующие его примеры (для тех, кому интересно):

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

:global arraytest {"a";"b";"c";{"q";"z"}}
:put $arraytest

:global pointer (>($arraytest->1))
:put $pointer
:put [$pointer]

:set ($arraytest->1) "x" 
:put $arraytest
:put $pointer
:put [$pointer]

:set [$pointer] "W"
:set $pointer "J"
:put $arraytest
:put $pointer
:put [$pointer]

:global pointer (>($arraytest->3))
:put $pointer
:put [$pointer]
:put ([$pointer]->1)

:set ([$pointer]->1) "RR"
:put $pointer
:put [$pointer]
:put $arraytest

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

:local ArrayIN { "alertList"="arrayvalue1","arrayvalue2";
                  "audioSettings"={ "DoP"={ "title"="DoP playback";
                                            "type"="boolean";
                                            "value"=false
                                          };
                                    "autoPlay"={ "title"="AutoPlay after boot";
                                                 "type"="boolean";
                                                 "value"=false
                                               };
                                    "soundCard"={ "data"={ {"id"=0;"name"="Default"}
                                                         };
                                                  "title"="Sound Card";
                                                  "type"="spinner";
                                                  "value"=0
                                                };
                                    "soundType"={ "data"={ {"id"=0;"name"="Mono Differential"};
                                                           {"id"=1;"name"="Stereo"}
                                                         };
                                                  "title"="Sound Type";
                                                  "type"="spinner";
                                                  "value"=1
                                                };
                                    "title"="Audio settings"
                                  };
                  "broadcastModeSettings"={ "broadcastModeOptions"={ "downloadURL"="no URL provided";
                                                                     "streamURL"="no URL provided"
                                                                   };
                                            "broadcastType"={ "data"={ {"id"=0;"name"="Default"};
                                                                       {"id"=1;"name"="Stream URL"};
                                                                       {"id"=2;"name"="Download URL"}
                                                                     };
                                                              "title"="Broadcast Type";
                                                              "type"="spinner";
                                                              "value"=0
                                                            };
                                            "enabled"=false;
                                            "title"="Broadcast mode settings"
                                          };
                  "deviceInfo"={ "autoUpgrade"=true;
                                 "autoUpgradeInstall"=true;
                                 "cpuTemp"="48 C";
                                 "version"="2.16.37"
                               };
                  "multiroomSettings"={ "masterMode"=false;
                                        "slaveList"="arrayvalue1","arrayvalue2"
                                      };
                  "networkSettings"={ "connections"={ "LAN"={ "addresses"="192.168.0.101/24";
                                                              "dns"="192.168.0.1";
                                                              "gateway"="192.168.0.1";
                                                              "method"="auto";
                                                              "state"="connected"
                                                            };
                                                      "WLAN"={ "state"="disconnected" }
                                                    };
                                      "interfaces"={ "LAN"={ "title"="Ethernet";
                                                             "type"="boolean";
                                                             "value"=true
                                                           };
                                                     "WLAN"={ "title"="Wi-Fi";
                                                              "type"="boolean";
                                                              "value"=false
                                                            }
                                                   };
                                      "title"="Network settings";
                                      "wifiList"="arrayvalue1","arrayvalue2"
                                    };
}


:local btypeSection (>($ArrayIN->"broadcastModeSettings"->"broadcastType"))
:log info ([$btypeSection]->"type")


:local btypeType (>($ArrayIN->"broadcastModeSettings"->"broadcastType"->"type"))
:log info [$btypeType]

Нигде ни в какой документации эта вещь не упоминается. РоутерОС, как обычно полна сюрпризов !

Вероятно это может быть полезно при работе со сложными данными типа ассоциативных массивов, деревьев и т.п. ...

Практическое использование:

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

:global arraytest {"a";"b";"c";{"q";"z"}}
:global pointer (>($arraytest->1))
:put [$pointer]
> b

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

:set  pointer (>($arraytest->2))
:put [$pointer]
> с

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

:global pointer
:for i from=0 to [:len $arraytest] do={
:set pointer (>($arraytest->$i))
:log info [$pointer]
}
>a
>b
>c
> g;z


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Ответить