读取器参考文档说明“标签字面量是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
中也进行同样的处理呢?