Clojure система для создания иерархии ключевых слов ad hoc знакома большинству людей, которые потратили немного времени на этот язык. Например, большинство демонстраций и презентаций языка включают такие примеры, как
(derive ::child ::parent)
и они продолжат показывать, как это можно использовать для отправки нескольких методов.
Во всех слайдах и презентациях, которые я видел, они используют глобальную иерархию. Но можно связать отношения ключевых слов в независимых иерархиях, используя (вывод h:: child:: parent), где h создается (make-hierarchy). Некоторые вопросы, поэтому:
- Существуют ли какие-либо рекомендации относительно того, когда это полезно или необходимо?
- Существуют ли какие-либо функции для управления иерархиями?
Слияние особенно полезно, поэтому я делаю это:
(defn merge-h [& hierarchies]
(apply merge-with (cons #(merge-with clojure.set/union %1 %2) hierarchies))
Но мне было интересно, существуют ли такие функции где-то еще.
EDIT: Изменена "обычная" иерархия для "независимой" иерархии, поскольку этот термин лучше описывает это животное. Кроме того, я провел некоторое исследование и включил свой собственный ответ ниже. Дальнейшие комментарии приветствуются.