0

有没有办法指示clojure.core.edn/read如何解析自动命名空间关键字?

  (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 关键字不能以 ::" 开头

我可以使用这个简单的示例,但是我还需要(读取自定义标签)load-file的可扩展性。edn

有一个参数来指示如何解析命名空间将使我的配置文件(强制使用clojure.spec)更具可读性。

4

2 回答 2

0

所以在我的情况下,最简单的解决方案是在我的配置文件中使用 clojure.spec 和未命名空间的关键字(我不知道它可以做到这一点)。

使用核心阅读器功能也可以。

Alex Miller 在 slack 上的引述:

是的,您需要 edn 配置文件中的完整命名空间您还可以使用 req-un 和 opt-un 在不合格的键上编写规范

普通的核心阅读器 fns 或 clojure.edn 阅读器 fns 应该能够读取标记的文字,尽管使用 # 你只需要绑定调用来设置阅读器

于 2016-07-26T16:55:03.963 回答
0

我喜欢在解析字符串之前对其进行转换,以保持 edn 文件干净,而不必将规范键视为不合格。

(-> "{::namespaced \"ko\" }"
    (#(string/replace % #"::" ":some.namespace/"))
    (edn/read-string))

在编写和重新读取 edn 文件时,这可能不是很健壮,但它适用于配置数据。

于 2019-09-18T22:41:43.027 回答