将Clojure代码序列化和反序列化为EDN

将Clojure代码序列化和反序列化为EDN,clojure,edn,Clojure,Edn,我正在尝试对Clojure代码使用标准序列化,它将忽略空格、注释等。我正在考虑使用它 根据我读到的内容,将s表达式序列化到EDN的标准方法是通过pr str,这似乎与Clojure的大多数构造很好地配合。但是,对于包含正则表达式的代码(使用hash string reader宏,如#“\d+”)来说,这似乎不太管用 我正在使用Clojure 1.8.0 有什么建议吗 谢谢 编辑: 谢谢你的回答和评论。我想首先使用EDN的原因是我想处理不受信任的代码 这个想法是,我想读这个代码(任何语法上有效的C

我正在尝试对Clojure代码使用标准序列化,它将忽略空格、注释等。我正在考虑使用它

根据我读到的内容,将s表达式序列化到EDN的标准方法是通过
pr str
,这似乎与Clojure的大多数构造很好地配合。但是,对于包含正则表达式的代码(使用hash string reader宏,如
#“\d+”
)来说,这似乎不太管用

我正在使用Clojure 1.8.0

有什么建议吗

谢谢

编辑: 谢谢你的回答和评论。我想首先使用EDN的原因是我想处理不受信任的代码


这个想法是,我想读这个代码(任何语法上有效的CuljuleCode),然后通过一些特殊用途的静态分析,以确保它符合我认为“安全”的Culjuri的特定子集,并且只有当它符合我认为执行这个代码时才是安全的。出于这个原因,我希望避免立即加载文件的

加载文件
,也可能避免
读取字符串
,因为考虑到它。

Clojure是EDN的超集,因此并非所有Clojure功能都受支持。
pr str
的输出是一个有效的Clojure程序,它已被转义以适合
字符串
RuntimeException
正在抱怨第一个转义的
,EDN
#
读卡器宏不支持它

(clojure.core/read-string (pr-str #"\d")) ;=> #"\d"

我的猜测是,EDN的重点是存储数据,而不是“代码”。您可以使用常规的
读取字符串
(带有陷阱)相反。如果这有助于正确回答:此处禁用:为什么不将Clojure代码保存到.clj文件中并使用Clojure加载它?请参阅我的编辑,内容涉及
读取字符串
加载文件
(clojure.core/read-string (pr-str #"\d")) ;=> #"\d"