我编写了以下宏,它定义了具有自定义字符串表示的记录。
(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)
要获得这种格式的字符串表示形式,我需要进行哪些更改?
另外,我应该对上述代码进行哪些更改(如果有的话)以使其更惯用?