Пока мылся в душе случайно нашел скрытое решение! Можно добавлять динамически элементы в массив используя оператор set - если элемент с ключом не существовал - то он добавляется!
{
:local key1 "MyKey1";
:local key2 "MyKey2";
:local val1 "MyValue1";
:local val2 "MyValue2";
:local a ({});
# Dynamic add element! :-)
:set ($a->$key1) $val1;
:set ($a->$key2) $val2;
:put $a;
:put [:len $a];
:put ($a->$key1);
:put ($a->$key2);
}
Вывод:
MyKey1=MyValue1;MyKey2=MyValue2
2
MyValue1
MyValue2
Как вариант кривого решения добавить такую глобальную функцию
:global Pair do={
#
:global gRet "";
:local str ":global gRet; :set gRet {\"$1\"=\"$2\"};";
:local func [:parse $str];
$func;
:return $gRet;
}
Потом мы можем делать так:
{
:local key "MySuperKey";
:local val "MyValue";
:local x [$Pair $key $val];
:put $x;
:put [typeof $x];
:put ($x->$key);
}
Вывод:
MySuperKey=MyValue
array
MyValue
Но решение уж больно блевотное. К тому же не обладает секьюрностью данных для параллельных задач - т.к. используется глобальная переменная
Головоломка для гуру скриптинга Микротик:
Знатоки! Внимание вопрос: как мне в run-time в скрипте в RouterOS установить значение ключа элемента ассоциативного массива из переменной?
Простой вариант
{
:local array {"key"="value"};
:put ($array->"key");
}
Вывод: value
Хочется "key" и "value" брать из переменных
:local key "mykey";
:local val "value";
# В след строке не работает как хотелось бы $key!
:local array {"$key"="$val"};
#при этом вполне работает получение элемента по ключу из переменной
:put ($array->$key);
уже сломал всю голову. юзал скобки, кавычки, $баксы - получается "$key"="$val" логическое выражение.
Кое как громоздко можно сделать через команду :parse - но получается очень стремный код.
P.S. Для чего мне это надо вообще - хочется написать одну функцию, которая возвращает ассоциативный массив (ключ-значение) при этом ключи заранее неизвестны.
Проблема да - явно со Switch-ом, роутер работает норм с портами и wifi модулем, которые не объединены в Switch методом указания master-порта: а если указать master - то все что оказывается в бридже - не функционирует.
belokuriha 9344 - это другая модель платы получается?
Народ располагает кто информацией - что в данной ситуации неисправно? что надо перепаять/заменить и т.п. Есть пара роутеров с такой же проблематикой. Я предполагаю, что имело место проблема с их питанием (один стоял в пром зоне, другой на квартире где уже выгорали порты после грозы на роутерах)