【发布时间】:2014-01-24 12:02:37
【问题描述】:
如果我使用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 序列的开头保留对某些内容的引用意味着整个序列都已存储。
这里定义的行为是什么?如果正在存储序列,是否有一种通用的方法来获取对象的副本并使序列的已实现部分能够被垃圾收集?
【问题讨论】: