4

在 Clojure 中将数据结构写入磁盘的最惯用方法是什么,以便我可以使用 edn/read 将其读回?按照Clojure 食谱中的建议,我尝试了以下方法:

(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)),但是我必须在序列的开头和结尾手动添加括号以获得所需的结果。

4

1 回答 1

4

您可以控制通过*print-length* 打印的集合中的项目数

考虑使用spit而不是手动打开 writer 和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我会在您最初通话时检查当前绑定。

于 2014-11-21T15:15:48.437 回答