欢迎!有关如何使用本网站的更多信息,请参阅 关于 页面。
eduction 期望其源集合是可迭代的(链接:1),其打印方法通过打印顺序(链接:2)。这隐含了一个可能限制将 eduction 应用于虚拟集合(例如由 I/O 或其他资源支持的纯 IReduceInit 源)的用例的承诺。我发现构造这些 I/O 可减少并将它们包装在 eduction 中很有用。但是,在与 REPL 交互时,打印出包装在 eduction 中的 IReduceInit 将失败。eduction 的打印方法实现需要太多吗?这只是一个额外的小不便,显然我也可以创建自己的版本 of eduction。
完全假设的例子
`(defn database-index[name](reify clojure.lang.IReduceInit
`
(reduce [_ f init] (with-open [rdr (fressian/create-reader (io/input-stream name))] (loop [] ...reduce impl...)))))
(eduction (filter (as-of #inst "2012-01-01")) (database-index "eavt.fress"));; ^ 打印时抛出异常 `
(链接:1) https://github.com/clojure/clojure/blob/master/src/clj/clojure/core.clj#L7336-L7338(链接:2) https://github.com/clojure/clojure/blob/master/src/clj/clojure/core.clj#L7360
建议的方法 由于我们有 #object 标签字面量,让 eduction 以不透明的 #object 打印