parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

Maxx 02.12 02:54 / 02.12 02:58

Исправляется более уникальными именами на ключ-значение:
^hash.foreach[_key;_value]{
Имхо, тогда уж что-нибудь совсем маловероятное, типа _key_149571943;_value_149571943, т.к. _key и _value все таки применяются, а ошибку эту не зная ее природы фиг найдешь, если ключи совпали.


Во втором методе к сожалению потерялись ключи, в части случаев. Такой вызов
^json:string[^select[$hash][key;value]($key eq 'a')[
	$.recursive(true)
]][
	$.indent(true)
]
Вернет пустой хэш. Почему понятно, $condition в ветке с рекурсией мы не проверяем, а просто прокидываем вглубь. Поэтому ключи, в которых не значения, а вложенные хэши мы просто пропускаем. Если проверить $condition до рекурсии, то мы получим ошибку несовпадения типов $value, в общем случае
^json:string[^select[$hash][key;value]($key eq 'b' && $value == '3')[
	$.recursive(true) 
]][
	$.indent(true)
]
Упадет, когда в ключе окажется хэш, а
[code]^json:string[^select[$hash][key;value]($key eq 'a' && $value.c == '1')[
	$.recursive(true) ^rem{в этом случае, кстати, если условие выполнилось - рекурсировать нам не надо, а просто вернуть ветку полностью}
]][
	$.indent(true)
]
наоборот, когда строка. Единственное что пока пришло в голову, завернуть ^if($condition) в try, и выполнять отдельную ветку