标签: clojure clojure-java-interop
有没有办法将字段访问器转换为函数?当我试图这样做时,我真的很惊讶
(map .x [o1 o2])
但不得不这样做
(defn x [o] (.x o)) (map x [o1 o2])
这似乎是不必要的。有没有办法为你创建这个功能?
答案 0 :(得分:7)
使用匿名fn
fn
(map #(.x %) [o1 o2]) (map (fn [o] (.x o)) [o1 o2])
或memfn - 我读过匿名fn比此更受欢迎。我会尝试找到这篇文章。
(map (memfn x) [o1 o2])
修改:Stu Halloway已this说memfn
memfn
答案 1 :(得分:1)
您可以编写自己的wee宏来生成匿名函数:
(defmacro field [m] `(fn [x#] (. x# ~m)))
然后,例如,
((field x) (java.awt.Point. 3 5)) ;3