gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:34:20 28 4
gpt4 key购买 nike

我正在尝试对 Clojure 代码使用标准序列化,该序列化将忽略空格、注释等。我正在考虑使用 EDN为了那个原因。

根据我读到的内容,将 s 表达式序列化为 EDN 的标准方法是通过 pr-str ,这似乎与 Clojure 的大多数结构都能很好地配合使用。但是,对于包含正则表达式的代码(使用哈希字符串读取器宏,例如 #"\d+" ),这似乎效果不佳。

user=> (pr-str '#"\d")
"#\"\\d\""

user=> (edn/read-string (pr-str '#"\d"))

RuntimeException No dispatch macro for: " Clojure.lang.Util.runtimeException (Util.java:221)

我正在使用 Clojure 1.8.0。

有什么建议?

谢谢!

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

这个想法是我想阅读这段代码(任何语法上有效的 Clojure 代码),然后通过一些特殊用途的静态分析来确保它符合我认为“安全”的 Clojure 的特定子集,并且只有如果它符合我会认为执行此代码是安全的。出于这个原因,我想避免 load-file ,它会立即加载文件,也可能是 read-string , 由于 these warnings关于它。

最佳答案

Clojure 是 EDN 的超集,因此并非所有 Clojure 功能都受支持。 pr-str的输出是一个有效的 Clojure 程序,它已被转义以适合 String . RuntimeException正在提示第一个越狱 " ,EDN 不支持此功能 #阅读器宏。

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

关于clojure - 将 Clojure 代码序列化和反序列化为 EDN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42325577/

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