gpt4 book ai didi

clojure - 截至 2013 年 8 月,在 Clojure 中编写 EDN 文件的 "Correct"方式是什么?

转载 作者:行者123 更新时间:2023-12-01 22:47:46 32 4
gpt4 key购买 nike

我想从 Clojure 中写出一个 EDN 数据文件作为标记文字。虽然clojure.edn API 包含 readread-string,没有 writer。我熟悉报告的问题 here 。基于此,我的理解是 prpr-str 函数就是今天要使用的函数。

我想咨询 StackOverflow 社区,看看类似下面的内容是否被认为是写出 EDN 文件的“正确”方法:

(spit "friends.edn" (apply str 
(interpose "\n\n"
[(pr-str (symbol "#address-book/person") {:name "Janet Wood"})
(pr-str (symbol "#address-book/person") {:name "Jack Tripper"})
(pr-str (symbol "#address-book/person") {:name "Chrissy Snow"})])))

如果您在生产中使用 EDN,如何写出 EDN 文件?和上面的类似吗?有什么需要注意的问题吗?

更新

Clojure Cookbook 条目,"Emitting Records as EDN Values"包含对此问题的更全面的解释以及产生有效 EDN 标记的处理方法。

最佳答案

您不需要手动生成标签。如果您使用任何 clojure 类型定义机制,它们将由打印机创建。 defrecord 对此特别方便。

(ns address-book)
(defrecord person [name])

(def people [(person. "Janet Wood")
(person. "Jack Tripper")
(person. "Chrissy Snow")])

address-book> (pr-str people)
"[#address_book.person{:name \"Janet Wood\"}
#address_book.person{:name \"Jack Tripper\"}
#address_book.person{:name \"Chrissy Snow\"}]"

如果您希望它们的格式更漂亮,您可以组合 with-out-strclojure.pprint/pprint。使用 Clojure 类型创建标签还可以让您免费阅读这些标签。

address-book> (read-string (pr-str people))
[#address_book.person{:name "Janet Wood"}
#address_book.person{:name "Jack Tripper"}
#address_book.person{:name "Chrissy Snow"}]

address-book> (def read-people (read-string (pr-str people)))
#'address-book/read-people

address-book> (type (first read-people))
address_book.person

我看到的唯一缺点是,如果你的命名空间中有 - ,你就会失去对标签外观的一些控制,因为 java 类不能包含这些,所以它们会转换为下划线。

关于clojure - 截至 2013 年 8 月,在 Clojure 中编写 EDN 文件的 "Correct"方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18476049/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com