Я использую clojure.contrib.sql
для извлечения некоторых записей из базы данных SQLite.Блоки Iterator в Clojure?
(defn read-all-foo []
(with-connection *db*
(with-query-results res ["select * from foo"]
(into [] res))))
Теперь, я не хочу, чтобы понять всю последовательность до возвращения из функции (то есть я хочу, чтобы держать его ленивым), но если я вернусь res
непосредственно или обернуть его какой-то ленивой обертку (например, я хочу сделать некое преобразование map
в последовательности результатов), привязки, связанные с SQL, будут сброшены, и соединение будет закрыто после того, как я вернусь, поэтому реализация последовательности вызовет исключение.
Как я могу заключить целую функцию в замыкание и вернуть вид блока итератора (например, в C# или Python)?
Или есть другой способ вернуть ленивую последовательность из этой функции?
Это то, что я хочу сделать, но я хочу, чтобы он автоматически обрабатывался закрытием блока итератора (или некоторой другой формой замыкания, которая реализует ленивый интерфейс seq). –