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能像pr那样,当*print-meta*绑定到true时显示所有元数据,那就太好了。
已关闭,附带注释: 已修复在1.10.2-rc1中

3 个答案

0

评论者:jafingerhut

附加的文件clj-1445-workaround-v1.clj代表一个函数,它用比clojure.pprint更多的元数据来pprint。如注释所述,它可能不会显示其他元数据的元数据。如果您创建了一个改进版本,请更新。

0

评论者:jafingerhut

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

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

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