读取器 参考文档 中表示:“带标签的字符串是 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
的符号也这样做呢?