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* 绑定为真时像 pr 一样显示所有元数据,那将会很棒。
已标记为在 1.10.2-rc1 中修复

3 个答案

0

评论者:jafingerhut

附加文件 clj-1445-workaround-v1.clj 是一个功能,pprint 中的元数据比 clojure.pprint 多。如注释中所提到的,它可能不会显示在其他元数据

  • 上的元数据。如果创建增强版本,请更新。

0

评论者:jafingerhut

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

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

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