【发布时间】:2022-09-23 04:08:40
【问题描述】:
我正在尝试创建一个也可以关闭的惰性序列。在 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))))
-
懒惰和关闭通常不能很好地协同工作。例如,您的预期用法展示了一个错误:因为
map是惰性的,所以在您使用它的任何元素之前,seq 将被关闭。最好确保在with-open主体的动态范围内急切地处理事情。 -
感谢@amalloy,我编辑了我的代码 sn-p 以添加一种使用序列的方法。它更多的是关于学习如何在惰性序列上添加行为而不是这个特定的例子。
标签: clojure