parser

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

 

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

Ответ

Безымянный 18.06.2015 21:09

info -- это плоский хэш, где ключ -- uid (уникальный идентификатор) хэша, значение -- сам хэш. изначально там ничего нет (пустой хэш)

^rem{# получаем $uid целевого хеша, зачем? }
чтобы запомнить тот факт, что мы этот хэш уже скопировали и не входить в его копирование в случае, если он-же присутствует рекурсивно в его дочерних объектах.

^rem{# что это такое? у меня масса предположений, в частности что это выход из рекурсии, но не уверен в понимании всей затеи }

если в info уже есть объект с таким uid -- просто возвращаем его в result и не входим в копирование.

^rem{# трикс какой-то... видимо позволяет обходить $._default ключи, в отличие от прямого foreach, опять же интересно почему }

если в хэше есть объект с ключём foreach, то написав ^hash.foreach мы обратимся к этому ключу, а не к методу. а нам нужен метод, чтобы перебрать все ключи. это единственный способ гарантированно получить метод и использовать его.

^rem{# is string почему-то нет }
потому, что все строки были скопированы инструкцией $result[^hash::create[$h]].