请分享您的想法至2024 Clojure状态调查!

欢迎!请查阅关于页面了解该功能的工作原理。

0
打印
我遇到一个问题,defrecord-types在某处被转换为普通映射,由于默认情况下它们以相同的方式pprint,因此很难在深层结构中跟踪。
以下代码修补到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 ")
                                      (dispatch (type obj))
                                   (print " ")
                                      (clojure.pprint/pprint-newline :fill)
                                   (dispatch obj)
                                   (print ")"))))]
       (clojure.pprint/pprint object writer)))))

1 个回答

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