字段访问器作为clojure中的函数?

时间:2014-09-24 16:50:08

标签: clojure clojure-java-interop

有没有办法将字段访问器转换为函数?当我试图这样做时,我真的很惊讶

(map .x [o1 o2])

但不得不这样做

(defn x [o] (.x o))
(map x [o1 o2])

这似乎是不必要的。有没有办法为你创建这个功能?

2 个答案:

答案 0 :(得分:7)

使用匿名fn

(map #(.x %) [o1 o2])
(map (fn [o] (.x o)) [o1 o2])

memfn - 我读过匿名fn比此更受欢迎。我会尝试找到这篇文章。

(map (memfn x) [o1 o2])

修改:Stu Halloway已thismemfn

答案 1 :(得分:1)

您可以编写自己的wee宏来生成匿名函数:

(defmacro field [m] `(fn [x#] (. x# ~m)))

然后,例如,

((field x) (java.awt.Point. 3 5))
;3