首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clojure edn读取自动命名空间关键字

Clojure edn读取自动命名空间关键字
EN

Stack Overflow用户
提问于 2016-07-26 15:12:39
回答 2查看 703关注 0票数 0

有没有一种方法可以指导clojure.core.edn/read如何解析自动命名空间的关键字?

代码语言:javascript
复制
  (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

最后一个例外是合理的,因为“关键字不能以:”开头:

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

如果有一个参数来指示如何解析名称空间,将使我的配置文件(使用clojure.spec胁迫)更易读。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-26 16:55:03

因此,在我的示例中,最简单的解决方案是在配置文件中使用带有非名称空间关键字的clojure.spec (我不知道它能做到这一点)。

使用核心阅读器功能也会奏效。

引用亚历克斯·米勒的话说:

是的,您需要在edn配置文件中使用完整的名称空间,您也可以用req-un和opt-un在不合格的键上编写规范。 无论是普通核心读取器fns还是clojure.edn读取器fns都应该能够读取带有标记的文字,但是使用#,您只需要绑定调用就可以设置读取器。

票数 0
EN

Stack Overflow用户

发布于 2019-09-18 22:41:43

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

代码语言:javascript
复制
(-> "{::namespaced \"ko\" }"
    (#(string/replace % #"::" ":some.namespace/"))
    (edn/read-string))

在写入和重新读取edn文件时,这可能不是非常健壮,但是对于配置数据来说,它工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38593698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档