2013-01-05 82 views
4

我想讓一個核心java類實現一個接口。 我沿着線嘗試一些:Clojure:爲現有的java類實現Seqable

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

但是這似乎並沒有工作,因爲Seqable只是一個接口,而不是一個協議。 是否可以使(seq 123)工作? seq如何爲java.lang.Strings實現?

代理也似乎不能做到這一點。

我知道我必須在這裏錯過somethnig真的很明顯。

回答

2

不可能。 clojure.lang.RT/seqFrom對於許多java內置類型(如集合和字符串)都有special cases,並且不能直接爲不實現Seqable的類添加自己的類。

+0

謝謝,我想知道當clojure被設計成使Seqable成爲一個協議還是它真的必須是一個特例的時候,是否有可能。 – WuHoUnited

+0

@WuHoUnited當Clojure最初實施時,他們沒有協議。我的理解是,他們在實施Clojurescript時非常成功地使用了它們。 – Bill

0

如果java類實現了Iterable,並且封裝在seq中,那麼可以將它用作序列,並且使用某個restrictions