defrecordで定義したデータを文字列化したときの内容はカスタマイズできるのでしょうか
clojure
初心者です。
今日ようやくdefrecord
のことを初めて知りました。深いことまでは分かりませんが、ふと思ったことがあります。
Java
であってもtoString
メソッドがクラスに定義されていればそのクラスオブジェクトに合った文字列表現を返すことができるように、clojure
の場合も似たような仕組みはあるのでしょうか?
興味半分にdefrecord
で定義したデータ型をstr
関数に渡すと何かハッシュ値のようなものが出てきました。
user=> (defrecord abc [aiu xyz])
user.abc
user=> (->abc 123 "ABC")
#user.abc{:aiu 123, :xyz "ABC"}
user=> (str (->abc 123 "ABC"))
"user.abc@79b2cefe"
この最後の部分を例えば"[abc: 123 xyz]"
のような文字列表現に変えることはできるのでしょうか。もしかするとそんなことをしたらclojure
の動作を破壊してしまうのかもしれませんが……
defrecord
ではない、ごく単純な例だとデータの内容がわかりやすく文字列化されているようです。
user=> (str #{1 2 3})
"#{1 3 2}"
ruby
などではこの手の方法をデバッグで有効に使うこともあったので質問してみました。
今これがわからなくて困っているわけではないですが、後々のプログラミングで気になるようにも思うので、ご教示いただけると嬉しいです。よろしくお願いします。
※ubuntu 15.04/windows7で、Clojure 1.8を使っています。