读取器 参考文档 说明“标记字面值是 Clojure 对 edn 标记元素的实现”。
但在至少一个方面两者是不同的:由标记字面值产生的符号将被解析,而由标记元素产生并由 clojure.edn/read-string
读取的符号则不会。
这意味着如果您阅读包含某个给定标记的 EDN,与您在源代码中使用相同的标记来产生字面值时,您可能会得到不同的输出。
示例
data_readers.cj
{example/symbolize clojure.core/symbol}
然后
user> (edn/read-string {:readers {(quote example/symbolize) clojure.core/symbol}}
"#example/symbolize\"hello\"")
hello
user> #example/symbolize "hello"
Syntax error compiling at (*cider-repl clojure/foragr:localhost:46533(clj)*:0:0).
Unable to resolve symbol: hello in this context
user>
为什么会有这种差异?是否存在这样一种场景,需要从标记字面值解析符号?如果是这样,为什么不从标记元素和 edn/read-string
中同样解析呢?