Предположим, у меня есть тип данных, в котором есть только одно поле, содержащее отсортированную карту.Clojure: прямой доступ к уникальному полю типа
(defrecord AdjacencyList [data])
(def adjacency-list (AdjacencyList. (sorted-map 1 {2 100}, 2 {3 -100})))
Теперь, если я хочу, чтобы манипулировать поле и держать его тип я должен сделать что-то вроде этого:
(AdjacencyList. (dissoc (:data adjacency-list) 2))
Есть ли способ, чтобы ссылаться на поле, вызвав запись?
(dissoc adjacency-list 2)
Если мне нужна регулярная хэш карта я мог бы использовать реализацию карты рекорда, но мне нужен отсортированная карта, и я получил другие аналогичные типы данных, используя наборы и векторы.
Решение будет заключаться в использовании deftype вместо этого и реализации необходимых структур данных, но я надеялся, что это не будет необходимо. обновление в функции
Пластинки одно поле, правильно? Есть ли причина, по которой вы не используете отсортированную карту напрямую? Это полиморфизм? – Beyamor
@beyamor Правильно, это одно поле, и я реализую протокол. – adeandrade
Это ваш протокол, или кто-то еще? Если вы, можете рассмотреть возможность ввода информации о типе в метаданные и вместо этого использовать несколько методов. – Chouser