我正在使用表示结果序列的 Java 类(有点像 Clojure vector )。
我想将这个类与典型的 Clojure 序列函数一起使用(即我想让这个类表现得好像它支持序列抽象)但是我不能改变这个类所以我无法使其实现 clojure.lang.Seqable
或类似的。此外,令人恼火的是,该类没有实现 java.util.Collection
或 java.lang.Iterable
。
我可以看到几个选项:
- 在对象的(现有)迭代器上使用
iterator-seq
。 - 将对象包装在另一个实现
java.util.Collection
/clojure.lang.Sequable
的类中
- 创建一个通过查询对象构建 Clojure vector 或序列的函数
还有其他选择吗?什么是最好的方法?
最佳答案
最快最直接的方法是使用iterator-seq
。
这确实引出了一个问题:为什么核心 Clojure 不提供像 SeqSource 这样的协议(protocol),它会被 seq
调用。然后可以“扩展”非标准集合以提供序列,类似于 InternalReduce 为 reduce
工作的方式。
关于java - 使 Java 类在 Clojure 中作为序列工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12966051/