分享您的想法,请访问 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


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

如果当 *print-meta* 绑定为 true 时,pprint 能够像 pr 一样显示所有元数据,那就很理想了。
以以下备注关闭:在 1.10.2-rc1 中修复

3 个回答

0

评论由:jafingerhut 提出

附件文件 clj-1445-workaround-v1.clj 是一个 pprints 的函数,它显示的元数据比 clojure.pprint 多。如注释所述,它可能不会显示在其他元数据上的元数据。如需创建增强版本,请予以更新。

0

评论由:jafingerhut 提出

附件文件clj-1445-workaround-v2.clj取代了较早版本,我将删除。

包含的函数pprint-meta似乎是正确打印所有元数据的pprint值的方法,即使元数据映射自身具有元数据。

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