简例说明这种行为
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 一样显示所有元数据,那就很理想了。