为 clojurescript 添加自定义打印方法

zca*_*ate 5 clojure clojurescript

为了自定义记录的打印,我通常添加一个打印方法:

(defrecord Op [type value]
  Object
  (toString [op]
    (str [type value])))

(defmethod print-method Op
  [v w]
  (.write w (str v)))
Run Code Online (Sandbox Code Playgroud)

但是当我在 clojurescript 中时,我收到一个错误:

Use of undeclared Var synchrony.operation/print-method at line 11
Run Code Online (Sandbox Code Playgroud)

我将如何在 cljs 中做到这一点?

Dan*_*ton 8

我认为在 ClojureScript 中执行此操作的方法是将IPrintWithWriter协议扩展到您的对象,例如

(extend-protocol IPrintWithWriter
  mycool.newObj
  (-pr-writer [new-obj writer _]
    (write-all writer "#myObj \"" (:details new-obj) "\"")))
Run Code Online (Sandbox Code Playgroud)

我找不到太多关于此的官方文档,因此可能有另一种/更好的方法来做到这一点。