doseq
如果我迭代但保留第一个元素的一部分,我想了解惰性序列的行为。
(with-open [log-file-reader (clojure.java.io/reader (clojure.java.io/file input-file-path))]
; Parse line parse-line returns some kind of representation of the line.
(let [parsed-lines (map parse-line (line-seq log-file-reader))
first-item (first parsed-lines)]
; Iterate over the parsed lines
(doseq [line parsed-lines]
; Do something with a side-effect
)))
我不想保留任何列表,我只想对每个元素执行副作用。我相信没有这个first-item
就不会有问题。
我在我的程序中遇到了内存问题,我认为也许在序列的开头保留对某些内容的引用parsed-line
意味着整个序列都被存储了。
这里定义的行为是什么?如果正在存储序列,是否有一种通用的方法来获取对象的副本并使序列的已实现部分能够被垃圾收集?