我正在尝试对 Clojure 代码使用标准序列化,它会忽略空格、注释等。我正在考虑为此使用EDN。
根据我阅读的内容,将 s 表达式序列化为 EDN 的标准方法是 through 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
由于这些警告。