我正在使用clojure.contrib.sql
从SQLite数据库中获取一些记录。Clojure中的迭代器块?
(defn read-all-foo []
(with-connection *db*
(with-query-results res ["select * from foo"]
(into [] res))))
现在,我真的不希望在函数返回(即我希望保持它的懒惰)之前实现全序列,但如果我回到res
直接或包裹起某种懒包装的(例如,我想对结果序列进行一定的map
转换),SQL相关的绑定将被重置,并且在我返回后连接将被关闭,因此实现该序列将引发异常。
如何将整个函数封装在闭包中并返回一种迭代器块(如C#或Python中的yield
)?
或者还有另一种方法从这个函数返回一个懒惰的序列?
这就是我想要做的,但我希望它通过迭代器块闭包(或实现懒惰seq接口的某种其他形式的闭包)自动处理。 – 2010-05-02 14:50:35