我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)
我正在使用Clojure 1.8.0.
有什么建议?
谢谢!
编辑: 感谢您的回答和评论.我想开始使用EDN的原因是我想处理不受信任的代码.
我的想法是,我想阅读这段代码(任何语法上有效的Clojure代码),然后通过一些特殊用途的静态分析来确保它符合我认为"安全"的特定Clojure子集,并且只如果符合,我会认为执行此代码是安全的.出于这个原因,我想避免load-file,它会立即加载文件,也可能read-string由于这些警告而加载文件.
Clojure 是 EDN 的超集,因此并非所有 Clojure 功能都受支持。的输出pr-str是一个有效的 Clojure 程序,已被转义以适合String. 抱怨RuntimeException第一个转义的", EDN 读取器宏不支持该转义#。
(clojure.core/read-string (pr-str #"\d")) ;=> #"\d"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
741 次 |
| 最近记录: |