2024年Clojure状态调查!中分享您的看法。

欢迎使用!请查看关于页面了解更多有关此功能的信息。

+1 投票
语法和读取器

比如说,我有一个像这样的edn文件

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

现在我想要程序性地更改:name的内容。

如果我读取edn文件,数据读取函数将被应用,所以如果我想将我的更改写入edn文件,则:some-key也会被更改。

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

1 答案

+5 投票
by
selected by
 
最佳答案

选项1 - 不要使用你的读取函数,或者安装一个替代方案。将default-data-reader-fn绑定到tagged-literal是一个有效的“中继”解决方案。请参阅https://insideclojure.org/2018/06/21/tagged-literal/以获取关于该问题的更详细说明。

选项2 - 为数据读取函数读取的任何对象提供自定义打印函数,以便它以相同的标记文本打印。您可能需要提供print-methodprint-dup多方法实现(它是基于类的键)。

by
太棒了。edn/read 接受 opts 中的 :default 键,将其传递给标记字面量,工作得完美!非常感谢!
...