分享您的想法在2024年Clojure调查!

欢迎!请访问关于页面,了解更多关于其工作方式的信息。

+1 投票
语法和读取器

假设我有一个像这样的edn文件

{:name :some-name
:some-key #my/data-reader-fn [1 2 3]}

现在假设我想程序化地更改:name的内容。

如果读取edn文件,数据读取器函数会被应用,因此如果想将更改写入edn文件,那么也将更改:some-key

这个问题有没有解决方案?

1 答案

+5 投票

选中
 
最佳答案

选项1 - 不要使用您的读取器函数,或安装一个替代选项。将default-data-reader-fn绑定到tagged-literal是一个有效的"中继"解决方案。有关更多说明,请参阅https://insideclojure.org/2018/06/21/tagged-literal/

选项2 - 为数据读取器函数读取的任何对象提供一个自定义打印函数,以便它可以以相同的标记字面量打印。您可能需要提供print-methodprint-dup多方法实现(它在类上键入)。

太棒了。edn/read在它的opts中接受一个:default键,传递标记字面量给它效果完美!非常感谢!
...