3

フィールドアクセサーを関数に変換する方法はありますか? これをやろうとしたときは本当に驚きました

(map .x [o1 o2])

しかし、代わりにこれをしなければなりませんでした

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

これはかなり不必要に思えます。この関数を作成する方法はありますか?

4

2 に答える 2

7

匿名を使うfn

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

またはmemfnfn - これよりも匿名の方が好ましいと読んだことがあります。記事探してみます。

(map (memfn x) [o1 o2])

編集:スチュ・ハロウェイはこれについて言いたいことがありますmemfn

于 2014-09-24T16:52:41.143 に答える
1

独自の we マクロを記述して、無名関数を生成できます。

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

次に、たとえば、

((field x) (java.awt.Point. 3 5))
;3
于 2014-09-25T13:31:13.483 に答える