Java类到Clojure地图

时间:2014-03-06 03:21:36

标签: java clojure

我是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}

1 个答案:

答案 0 :(得分:2)

.toString等是调用代码中的符号。

我认为传递方法名称并使用“。”调用它会更好。

(defmacro obj-to-map 
  [obj & body]
  (let [afn (fn [[method kw]]
              `(~kw (. ~obj ~method)))]
  `(assoc {} ~@(mapcat afn (partition 2 body)))))

(obj-to-map "hello" length :length toString :value)  

=>  {:value "hello", :length 5}