请在2024 Clojure 状态调查!中分享您的想法。

欢迎!请参阅关于页面以了解更多关于此功能的信息。

+3
语法和读取器
重新标记

*default-data-reader-fn*设置为tagged-literal(参见https://clojure.org/reference/reader#_default_data_reader_function)在REPL中如下

user=> (set! *default-data-reader-fn* tagged-literal)

如广告所示,REPL现在可以读取未知标记字面量,例如

user=> #foo 123
#foo 123

但是,当嵌套在表达式(如下所示)中时,它会失败

user=> (prn #foo 123)
Syntax error compiling fn* at (REPL:1:1).
Can't embed object in code, maybe print-dup not defined: clojure.lang.TaggedLiteral@34b5d34f

错误信息中的提示确实有效,所以我提供

user=> (defmethod print-dup clojure.lang.TaggedLiteral [tl w] (print-method tl w))

REPL现在可以成功读取和评估先前的表达式

user=> (prn #foo 123)
#foo 123
nil

也许是时候默认提供clojure.lang.TaggedLiteralprint-dup实现了吗?

1 答案

+2

已选中
 
最佳回答

是的,应该如此,记录为 https://clojure.atlassian.net/browse/CLJ-2801

...