我想使用Clojure的代碼,一個是會忽略空格,註釋等,我想用EDN爲一個標準序列。序列化和反序列化的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把它。
我的_guess_這裏是,EDN的重點是存儲數據,而不是「代碼」。您可以使用常規的「讀取字符串」(具有缺陷)。如果它有助於正確的答案:它在這裏禁用:https://github.com/clojure/clojure/blame/master/src/jvm/clojure/lang/EdnReader.java#L53 – cfrick
你爲什麼不只是保存的Clojure代碼到.clj文件並使用Clojure加載它? –
請參閱我的關於'read-string'和'load-file'的編輯。 –