为了这个问题,我们假设我创建了以下教育。
(def xform (map inc))
(def input [1 2 3])
(def educt (eduction xform input))
现在我想将educt
传递给某个可以进行某种缩减的函数。我想传递educt
而不是xform
和input
的原因是我不想将xform
和input
公开给该函数。如果我这样做,该功能可以简单地执行(transduce xform f init input)
。但是,正如我所做的那样,该功能留有一个不能与transduce
一起使用的教育。
我知道我可以,例如在教育上使用doseq
,但我相信这将创建一个seq - 在对象实例化和缓存使用方面的所有开销。
那么我怎样才能有效地和惯用地迭代一个教育?
当教育实施java.lang.Iterable
时,这个问题可能会推广到:
如何在不创建seq的情况下迭代java.lang.Iterable