String 将自定义类型转换为字符串
给定Clojurescript中的自定义数据类型:String 将自定义类型转换为字符串,string,clojurescript,String,Clojurescript,给定Clojurescript中的自定义数据类型: (deftype Foo [bar]) 我希望能够使用str宏将此类型转换为字符串。(str(->Foo“bar”)的结果总是“[object object]”。浏览各种文档和源代码时,我发现了允许我定义自定义字符串表示形式的IPrintWithWriter协议。因此,下面的扩展非常接近我所寻找的: (extend-type Foo IPrintWithWriter (-pr-writer [this writer _] (-writ
(deftype Foo [bar])
我希望能够使用str
宏将此类型转换为字符串。(str(->Foo“bar”)
的结果总是“[object object]”
。浏览各种文档和源代码时,我发现了允许我定义自定义字符串表示形式的IPrintWithWriter
协议。因此,下面的扩展非常接近我所寻找的:
(extend-type Foo
IPrintWithWriter
(-pr-writer [this writer _] (-write writer (str "test:" (.-bar this)))))
实际上,当使用(pr str(->Foo“bla”)
时,返回值实际上就是字符串“test:bla”
。但是,str
的返回值保持为“[object object]”
如何为str
而不是pr str
提供Foo
的自定义字符串表示形式?ClojureScript使用对象。toString
方法作为其参数传递:
(str x)返回x.toString()
您可以为Foo
类型重写此方法:
(deftype Foo [bar]
Object
(toString [this]
(str "Test: " bar)))
;; => cljs.user/Foo
(str (->Foo "x"))
;; => "Test: x"
注意:要涵盖所有情况,实际上需要同时应用
对象.toString
和IPrintWithWriter.-pr writer
方法。这意味着您将看到(str x)
和(str[x])
的正确字符串。