カスタム文字列表現でレコードを定義する次のマクロを作成しました。
(defmacro defrecord*
[rname args]
`(defrecord ~rname [~@args]
Object
(toString [_]
~(let [kvs (->> args
(map (fn [arg] [(str arg ": ") arg]))
(interpose ", ")
(apply concat))]
`(str ~rname "(" ~@kvs ")")))))
ただし、toString
返されるものは、私が期待しているものとはまったく異なります。
(defrecord* Foo [bar baz])
(.toString (Foo. 3 4))
> "class user.Foo(bar: 3, baz: 4)"
この場合toString
は返品したいです。Foo(bar: 3, baz: 4)
この形式で文字列表現を取得するには、どのような変更を加える必要がありますか?
また、上記のコードをより慣用的にするために、どのような変更を加える必要がありますか?