datatype 型で Readable な文字列を得るには
defrecord した datatype 型を REPL で表示すると Readable な文字列が表示されるのに str 関数で文字列を得ようとすると、いやんな感じになってしまう。
user> (defrecord message [sender text]) user.message user> (def s (message. "Tom" "Hello")) #'user/s user> s #:user.message{:sender "Tom", :text "Hello"} user> (str s) "user.message@c30bb043" user> (.toString s) "user.message@c30bb043"
で、調べてみたところ、 REPL で表示されているような文字列を得るには、 pr-str 関数を使うらしい。
user> (pr-str s) "#:user.message{:sender \"Tom\", :text \"Yes\"}"
str でも同様の表示に変更したい場合は toString メソッドを実装する。
user> (defrecord message [sender text] Object (toString [this] (pr-str this))) user.message user> (def s (message. "Tom" "Hello")) #'user/s user> s #:user.message{:sender "Tom", :text "Hello"} user> (str s) "#:user.message{:sender \"Tom\", :text \"Hello\"}"