Расширение протоколов для пользовательских классов, карт и последовательностей Java в Clojure - PullRequest
5 голосов
/ 02 августа 2010

Я создал протокол в Clojure 1.2, который обрабатывает мои собственные классы Java и имеет стандартную обработку для общего java.lang.Object. Код выглядит примерно так:

(extend-protocol PMyProtocol
  my.java.ClassName
    (protocol-function [c]
      "My Java class result")

  java.lang.Object
    (protocol-function [c]
      "Default object result"))

Как мне расширить это, чтобы иметь специальную обработку для стандартных структур данных Clojure (в частности, карт, векторов и последовательностей)?

1 Ответ

4 голосов
/ 02 августа 2010

Все постоянные структуры данных Clojure реализуют интерфейсы, расширяющие clojure.lang.PersistentCollection. Временные коллекции Clojure реализуют clojure.lang.TransientCollection. Вы можете распространить свой протокол на них, как если бы вы распространяли его на класс (хотя иметь дело только с постоянными коллекциями может иметь больше смысла).

...