2013-01-05 2 views
4

인터페이스를 구현하는 핵심 Java 클래스를 만들려고합니다. 나는의 라인을 따라 뭔가를 시도하고있다 :Clojure : 기존 Java 클래스의 Seqable 구현

(extend-protocol clojure.lang.Seqable 
    java.lang.Integer 
    (seq [this] (seq (str this)))) 

을하지만 Seqable 그냥 인터페이스가 아닌 프로토콜이기 때문에이 작동하지 않습니다. (seq 123)을 사용할 수 있습니까? java.lang.Strings에 대해 seq이 어떻게 구현 되었습니까?

프록시도 이것을 수행 할 수없는 것 같습니다.

나는 여기에서 정말로 분명한 somethnig를 놓치고 있어야합니다.

답변

2

불가능합니다. clojure.lang.RT/seqFrom은 Collection 및 String과 같은 여러 자바 내장 유형에 대해 special cases을 가지고 있으며 Seqable을 직접 구현하지 않는 클래스에는 자신을 추가 할 수 없습니다.

+0

감사합니다. clojure가 Seqable 프로토콜을 만들기 위해 설계되었거나 실제로 특수한 경우 여야했는지 여부가 궁금 했었습니다. – WuHoUnited

+0

@WuHoUnited Clojure가 처음 구현되었을 때 프로토콜이 없었습니다. 내 이해하지만, 그들은 Clojurescript를 구현할 때 큰 성공을 거두었 다. – Bill

0

Java 클래스가 Iterable을 구현하고 seq에 랩핑 된 경우 특정 restrictions과 함께 시퀀스로 사용할 수 있습니다.