2016-07-26 52 views
0

有沒有辦法指示clojure.core.edn/read如何解析自動命名空間關鍵字?Clojure edn讀取自動命名空間關鍵字

(edn/read-string "{:not-namespaced \"ko\" }") ;;=> {:not-namespaced "ko"} 
    (edn/read-string "{:namespaced/ok \"ko\" }") ;;=> #:namespaced{:ok "ko"} 
    (edn/read-string "{::namespaced \"ko\" }") ;;=> Unhandled java.lang.RuntimeException Invalid token: ::namespaced autonamespaced does not work 

最後一個例外是有道理的,因爲"A keyword cannot begin with ::"

我可以使用load-file這個簡單的例子,但是我也需要edn(讀取自定義標籤)的可擴展性。

有一個參數指示如何解析命名空間將使我的配置文件(強制使用clojure.spec)更具可讀性。

+1

你嘗試過使用'clojure.core/read-string'嗎? – OlegTheCat

+0

@OlegTheCat有趣,我沒有!儘管如此,我不得不去挖掘它的選項圖。 – nha

+0

@OlegTheCat據我所知,clojure.core/read-string將不會讓我有像edn這樣的讀者。這將阻止我在https://github.com/juxt/aero中定義的配置(否則可能有效)。 – nha

回答

0

所以在我的情況下,最簡單的解決方案是在我的配置文件中使用clojure.spec和un-namespaced關鍵字(我不知道它可以這樣做)。

使用核心閱讀器功能也可以。

上鬆弛亞歷克斯·米勒報價:

是的,你需要在EDN配置文件全命名空間,你可以對不合格的鍵也 寫的規格與REQ-UN和選擇聯合國

無論是正常的核心目標讀者FNS或clojure.edn讀者FNS應該 能夠讀取標籤的文字,雖然與#你只需要綁定 呼叫周圍設立讀者