簡體   English   中英

Clojure 中的可關閉惰性序列

[英]Closeable lazy-seq in Clojure

我正在嘗試創建一個也可以關閉的惰性序列。 在 Clojure 中最干凈的方法是什么? 預期用途(但這只是一個示例,我可以想到可關閉惰性序列的更多用法):

(with-open [lines (file-lines-seq file)]
   (consume (map do-stuff-to-line lines))) 

在這種情況下,這相當於:

(with-open [reader io/reader file]
    (consume (map do-stuff-to-line (line-seq file))))

設法通過這段精彩的代碼獲得預期的用途:

(defn file-lines-seq [file]
  (let [reader (clojure.java.io/reader file)
        lines-seq (line-seq reader)]
    (reify
      Closeable
      (close [this] (.close reader))
      
      ISeq
      (first [this] (.first lines-seq))
      (next [this] (.next lines-seq))
      (more [this] (.more lines-seq))
      (cons [this var1] (.cons lines-seq var1))
      (count [this] (.count lines-seq))
      (empty [this] (.empty lines-seq))
      (equiv [this var1] (.equiv lines-seq var1))
      (seq [this] (.seq lines-seq))
)))

如果有更丑陋的方法可以做到這一點,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM