Tôi đang sử dụng clojure.contrib.sql
để tìm nạp một số bản ghi từ cơ sở dữ liệu SQLite.Các khối Iterator trong Clojure?
(defn read-all-foo []
(with-connection *db*
(with-query-results res ["select * from foo"]
(into [] res))))
Bây giờ, tôi không thực sự muốn thực hiện toàn bộ chuỗi trước khi trở về từ chức năng (tức là tôi muốn giữ nó lười biếng), nhưng nếu tôi trở res
trực tiếp hoặc quấn nó một số loại wrapper lười biếng (ví dụ tôi muốn thực hiện một chuyển đổi map
nhất định trên chuỗi kết quả), các liên kết liên quan đến SQL sẽ được đặt lại và kết nối sẽ bị đóng sau khi tôi quay trở lại, vì vậy việc thực hiện chuỗi sẽ ném một ngoại lệ.
Làm cách nào để có thể đóng toàn bộ chức năng trong một đóng và trả về một loại khối lặp (như yield
trong C# hoặc Python)?
Hoặc có cách nào khác để trả về chuỗi lười từ chức năng này không?
Đó là những gì tôi muốn làm, nhưng tôi muốn nó được xử lý tự động bằng cách đóng khối lặp (hoặc một dạng đóng khác để thực hiện giao diện lười biếng). –