2010-08-02 1 views
5

Clojure 1.2에서 자체 Java 클래스를 처리하고 generic java.lang.Object에 대한 기본 처리 기능을 가진 프로토콜을 만들었습니다. 코드는 무엇인가 다음과 같습니다Clojure에서 사용자 정의 Java 클래스, 맵 및 시퀀스에 대한 프로토콜 확장

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

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

나는이 (특히지도, 벡터와 서열) 표준 Clojure의 데이터 구조에 대한 특별한 처리를 위해 확장하는 방법?

답변

4

Clojure의 모든 영구 데이터 구조는 clojure.lang.PersistentCollection으로 확장되는 인터페이스를 구현합니다. Clojure의 일시적인 컬렉션은 clojure.lang.TransientCollection을 구현합니다. 프로토콜을 클래스로 확장하는 것처럼 프로토콜을 확장 할 수 있습니다 (영구적 인 컬렉션 만 다루는 것이 더 합리적 일 수도 있음).

+2

'c.l.IPersistentMap','c.l.IPersistentVector','c.l.IPersistentSet' (거기에는 시스템이 있습니다 ...)와'c.l.ISeq' 시퀀스에 대해 명시 적으로 이름을 지정하십시오. – kotarak

+0

감사합니다 Michal 및 kotarak! 나는 clojure.lang.IPersistentMap과 clojure.lang.ISeq를 사용하여 끝내었다. – mikera

관련 문제