Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
andylars 16.06.2015 11:42 / 16.06.2015 13:21
Собственно код:@Hash_DeepCopy[h] ^rem{# собственно сам метод, вспом.метод понадобился в основном по причине магии с uid?} ^if($h is "hash"){ $result[^_hashDeepCopy[$h;^hash::create[]]] ^rem{# передаем во вспом.метод целевой хеш и объект пустой хеш } }{ ^throw[;Param must be hash] } @_hashDeepCopy[h;info][uid;k;v;j] ^rem{# следим за руками: $h-целевой хеш, $info-пустой хеш (место копирования) } $uid[^reflection:uid[$h]] ^rem{# получаем $uid целевого хеша, зачем? } $result[$info.$uid] ^rem{# что это такое? у меня масса предположений, в частности что это выход из рекурсии, но не уверен в понимании всей затеи } ^if(!$result){ ^rem{# не знал, что неприсвоенный $result возвращает bool... } $result[^hash::create[$h]] ^rem{# задаем результат ответа: плоскую копию целевого хеша, если дальнейшее не исполнится } $info.[$uid][$result] ^rem{# создаем "болванку" $info.$uid-of-target[плоская_копия_целевого_хеша] } $j[^reflection:method[$h;foreach]] ^rem{# трикс какой-то... видимо позволяет обходить $._default ключи, в отличие от прямого foreach, опять же интересно почему } ^j[k;v]{ ^rem{# триксовый foreach k-ключ, v-значение } ^if($v is hash){ $result.[$k][^_hashDeepCopy[$v;$info]] ^rem{# если $v это хеш, рекурсивно вызываем этот метод с параметрами $v-целевой хеш, $info - куда... тут сдаюсь пока } }($v is int || $v is double){ ^rem{# если число, то просто присваивае } $result.[$k]($v) }($v is table){ ^rem{# если таблица, копируем таблицу } $result.[$k][^table::create[$v]] }($v is date){ ^rem{# если дата, копируем дату } $result.[$k][^date::create[$v]] } ^rem{# is string почему-то нет } } }