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

时间:2016-07-26 15:12:40

标签: clojure edn

有没有办法指示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 keyword cannot begin with ::"

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

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

2 个答案:

答案 0 :(得分:0)

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

使用核心阅读器功能也会起作用。

亚历克斯米勒引用松弛的话:

  

是的,在edn配置文件中你需要完整的命名空间你也可以   使用req-un和opt-un

在非限定密钥上编写规范      

普通核心阅读器fns或者clojure.edn阅读器应该是   能够用#读取标记的文字但你只需要绑定   围绕电话设置读者

答案 1 :(得分:0)

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

{
    "version": "0.2.0",    
    "configurations": [
        {
            "name": ".NET Core Launch (web)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceFolder}/bin/Debug/netcoreapp3.0/testreactredux.dll",
            "args": [],
            "cwd": "${workspaceFolder}",
            "stopAtEntry": false,
            // Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
            "serverReadyAction": {
                "action": "debugWithChrome", // <---- CHANGE HERE ( default is 'openExternally' )
                "pattern": "^\\s*Now listening on:\\s+(https?://\\S+)"
            },
            "env": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            },
            "sourceFileMap": {
                "/Views": "${workspaceFolder}/Views"
            }
        }
    ]
}

在写入和重新读取edn文件时,这可能不是很可靠,但对于配置数据来说效果很好。