Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala类的Clojure ISeq_Scala_Clojure - Fatal编程技术网

Scala类的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

我有很多Scala类(比如Lift的Box、Scala的Option等等),我想 在Clojure中用作Clojure ISeq

我如何告诉Clojure如何使这些类成为ISeq,以便所有不同的序列
相关函数“正常工作”

如果类实现了
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/:/