我刚接触Clojure,创建了一个简单的宏来调用Java类中的某些方法,并将结果返回到Clojure映射中,这一切都很好运行。(我也知道bean
函数,但我使用的类不是bean。)
我的问题是关于调用代码的。传递Java“方法”作为符号是否更好?
我甚至不确定现在(在调用代码中).toString
是什么类型?它可以工作,但不确定它是否符合Clojure惯用法。
(defmacro obj-to-map
[obj & body]
(let [afn (fn [[method kw]]
`(~kw (~method ~obj)))]
`(assoc {} ~@(mapcat afn (partition 2 body)))))
(obj-to-map "hello" .length :length .toString :value)
=> {:value "hello", :length 5}