Scala类的Clojure ISeq
我有很多Scala类(比如Lift的Box、Scala的Option等等),我想 在Clojure中用作Clojure ISeq 我如何告诉Clojure如何使这些类成为ISeq,以便所有不同的序列Scala类的Clojure ISeq,scala,clojure,Scala,Clojure,我有很多Scala类(比如Lift的Box、Scala的Option等等),我想 在Clojure中用作Clojure ISeq 我如何告诉Clojure如何使这些类成为ISeq,以便所有不同的序列 相关函数“正常工作”如果类实现了Iterable接口,那么您可以对它们调用seq,以获得序列。序列库中的大多数函数都可以为您实现这一点,但在几乎所有正常情况下,您都可以将它们传递给seq函数,如first和count。要基于Arthur的答案,您可以在Scala中提供一个通用包装器类,如下所示: c
相关函数“正常工作”如果类实现了
Iterable
接口,那么您可以对它们调用seq
,以获得序列。序列库中的大多数函数都可以为您实现这一点,但在几乎所有正常情况下,您都可以将它们传递给seq函数,如first
和count
。要基于Arthur的答案,您可以在Scala中提供一个通用包装器类,如下所示:
class WrapCollection(repr: TraversableOnce[_]) extends clojure.lang.Seqable { ... }
这篇文章的第一部分是正确的建议,但您绝对不能将Seqable扩展到已经定义的类,因为它是一个接口,而不是一个协议。这难道不仅仅是
java.lang.Iterable
的情况吗?Scala集合(更不用说选项
或框
)没有,而是在我前面的评论中混入(或隐式转换为)Scala.collection.TraversableOnce
,Scala.collection.TraversableLike
,和/或它们的subtraits.s/java.lang/java.util/:/