读取器参考文档中表示“标记字面量是 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
进行解析呢?