在 Clojure 1.10.1 REPL 中键入 {:nil/a 1}
会打印出 #:nil{:a 1}
。
但是键入 #:nil{:a 1}
会引发以下错误
java.lang.RuntimeException: Namespaced map must specify a valid namespace: null
clojure.lang.LispReader$ReaderException: java.lang.RuntimeException: Namespaced map must specify a valid namespace: null
clojure.lang.ExceptionInfo:
java.lang.RuntimeException: Unmatched delimiter: }
clojure.lang.LispReader$ReaderException: java.lang.RuntimeException: Unmatched delimiter: }
clojure.lang.ExceptionInfo:
(clojure.edn/read-string (pr-str {:nil/a 1}))
使用以下异常失败
java.lang.RuntimeException: Namespaced map must specify a valid namespace: null
这也适用于其他命名空间
(clojure.edn/read-string (pr-str {:1/a 1}))
; => java.lang.RuntimeException: Namespaced map must specify a valid namespace: 1
(clojure.edn/read-string (pr-str {:true/a 1}))
; => java.lang.RuntimeException: Namespaced map must specify a valid namespace: true
这实际上并没有什么意义,因为 (clojure.edn/read-string ":true/a")
运行正常。