在Clojure中将数据结构写入磁盘的最惯用的方法是什么,所以我可以用edn / read读回来?我按照Clojure cookbook中的建议尝试了以下内容:
(with-open [w (clojure.java.io/writer "data.clj")]
(binding [*out* w]
(pr large-data-structure)))
但是,这只会写出前100个项目,然后是“......”。我也尝试了(prn (doall large-data-structure))
,产生了相同的结果。
我已经设法通过逐行写入(doseq [i large-data-structure] (pr i))
来完成,但是我必须在序列的开头和结尾手动添加parens以获得所需的结果。
答案 0 :(得分:2)
您可以控制通过*print-length*
打印的集合中的项目数 <击>
考虑使用spit而不是手动打开编写器和pr-str,而不是手动绑定到*out*
。
(binding [*print-length* false]
(spit "data.clj" (pr-str large-data-structure))
击> <击> 撞击>
从评论中编辑:
(with-open [w (clojure.java.io/writer "data.clj")]
(binding [*print-length* false
*out* w]
(pr large-data-structure)))
注意:*print-length*
的根绑定为nil
,因此您不需要在上面的示例中绑定它。我会在原始pr
电话时检查当前的绑定。