在clojure中将大数据结构作为EDN写入磁盘

时间:2014-11-21 15:06:16

标签: clojure edn

在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以获得所需的结果。

1 个答案:

答案 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电话时检查当前的绑定。