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

欢迎!请参阅 关于 页面了解此内容的更多信息。

+3
打印
已关闭
该行为的一个简短示例

user=> *clojure-version*
{:major 1, :minor 6, :incremental 0, :qualifier nil}

user=> (def f1 '(defn foo [^Integer x] ^{:bar 8} (inc x)))
#'user/f1

;; pr 显示所有元数据,如预期

user=> (binding [*print-meta* true] (pr f1))
^{:line 2, :column 10} (defn foo [^Integer x] ^{:bar 8, :line 2, :column 33} (inc x))nil

;; pprint 显示一些元数据,但不显示所有

user=> (binding [*print-meta* true] (clojure.pprint/pprint f1))
(defn foo [^Integer x] (inc x))
nil


我尚未深入细节,但看起来这可能是因为 pprint 使用 pr 来显示符号,但不显示集合。因此,pprint 在符号上显示元数据,但在集合上不显示。

如果 pprint 能够在 *print-meta* 被绑定为 true 时像 pr 一样显示所有元数据,那将很棒。
关闭并注明: 已在 1.10.2-rc1 fixed

3 答案

0

评论由:jafingerhut 撰写

附加文件 clj-1445-workaround-v1.clj 是一个功能,它可以像 clojure.pprint 那样打印更多元数据。正如评论中提到的,它可能不会显示在其他元数据上的元数据。如果您创建了改进版本,请更新。

0

评论由:jafingerhut 撰写

附加文件 clj-1445-workaround-v2.clj 优于早期版本,我将删除它。

包含的功能 pprint-meta 似乎是一种打印带所有元数据的值的正确方法,即使元数据映射本身也有元数据。

0
参考: https://clojure.atlassian.net/browse/CLJ-1445 (由 jafingerhut 报告)
...