Clojure/ClojureScript:如何插入 EDN 标记文字的自定义打印实现?

问题描述 投票:0回答:1

我有一条记录,一个实例,我将其打印到 EDN 字符串:

(ns my)
(defrecord Ref [type id])
(def rich (->Ref :Person 42)
(pr-str rich)

我想要

"#my.Ref [:Person 42]

但是我明白了

"#my.Ref{:type :Person, :id 23}"

如何插入自定义实现来打印

Ref
的实例?

clojure clojurescript edn
1个回答
3
投票

在 CLJS 中,这是通过

cljs.core/IPrintWithWriter
协议完成的。

(extend-type Ref
  IPrintWithWriter
  (-pr-writer [this writer opts]
    (-write writer "#my.Ref ")
    (-pr-writer [(:type this) (:id this)] writer opts)))

在 CLJ 中,这是通过

clojure.core/print-method
多种方法完成的。

(defmethod print-method Rec [this writer]
  ...)
© www.soinside.com 2019 - 2024. All rights reserved.