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

欢迎!请查看 关于 页面了解有关此功能的一些更多信息。

0
打印
我在代码库处理中遇到了 defrecord-types 转换为普通问题,这在深层结构中相对难以跟踪,因为默认情况下它们会被顶层打印为相同的东西。
以下代码修补到 pprint 分派并打印值周围的类型;这表明非常实用,但感觉像是黑客式的。
可能需要将类似功能直接集成到 clojure.pprint 中(已经有许多外观选项),即集成到 clojure.pprint/write-out。

仅在某些情况下打印 {{(type)}} 可能不够;因此,打印所有元数据的选项将很棒。
可能像 {{:metadata nil}} 这样的选项将作为默认值,{{:metadata :type}} 用于打印类型(但对于非 IMetas,使用 {{(type)}} 和 {{:metadata true}} 打印使用 {{(meta)}} 的 IMetas 的元数据)。


(defn pprint-with-type
空格
  ([object] (pprint object *out*))
  ([object writer]
   ; 保持原始分派。
   ; 直接调用它将只打印该对象,
   ; 但返回到我们的分派以处理子对象。
     (let [dispatch clojure.pprint/*print-pprint-dispatch*]
                 (binding [clojure.pprint/*print-pprint-dispatch*
                           (fn [obj]
                                 (if (instance? clojure.lang.IMeta obj)
                                   (do (print "^{:type ")
                                           (dispatch (type obj))
                                           (print "}")
                                           (clojure.pprint/pprint-newline :fill)
                                 (dispatch obj))
                                   (do (print "^{:type ")
                                   (do (print "(^:type ")
                                           (print "}")
                                           (print " ")
                                           (dispatch obj)
                                 (print ")"))))

1 个答案

0
参考:https://clojure.atlassian.net/browse/CLJ-1471(由 alex+import 报告)
...