【发布时间】:2011-02-14 18:12:51
【问题描述】:
我正在使用clojure.contrib.sql 从 SQLite 数据库中获取一些记录。
(defn read-all-foo []
(with-connection *db*
(with-query-results res ["select * from foo"]
(into [] res))))
现在,我真的不想在从函数返回之前实现整个序列(即我想让它保持惰性),但是如果我直接返回 res 或者将它包装成某种惰性包装器(例如我想对结果序列做一定的map转换),SQL相关的绑定会在我返回后被重置并关闭连接,所以实现序列会抛出异常。
如何将整个函数封装在闭包中并返回一种迭代器块(如 C# 或 Python 中的 yield)?
或者还有其他方法可以从此函数返回惰性序列吗?
【问题讨论】:
标签: clojure lazy-evaluation lazy-sequences