1

私はこれを持っています:

(defn my-page []
  (layout/render
   "page1.html" ({:articles (map
                             #(update % :field1 (fn [d] (something.... )))
                              (db/get-all-articles))})))
                            ; how can I call map again to process other fields?
                            ; (map for :field2 .... ???? how?)
                            ; (map for :field3 .... ???? how?)     

他のフィールドも前処理したい。どうすればそれを適切に行うことができますか?つまり、変数 :article と関数マップが既にあるので、:field2 や field3 などの他のフィールドを再度マップするにはどうすればよいでしょうか?

4

2 に答える 2

0

これらの更新を縮小して一般化することもできます。

user> (def items {:field1 1
                  :field2 2
                  :field3 3})
#'user/items
user> (reduce-kv update items {:field1 inc
                               :field2 dec
                               :field3 #(* % 2)})
{:field1 2, :field2 1, :field3 6}
于 2016-05-31T12:48:39.000 に答える
0

スレッド マクロを使用します。

(def m {:field1 1
        :field2 2
        :field3 3})

(-> m
  (update :field1 (fn [v1] ...))
  (update :field2 (fn [v2] ...))
  (update :field3 (fn [v3] ...)))

それは以下と同等です:

(update
  (update 
    (update m :field1 (fn [v1] ...))
    (fn [v2] ...))
  (fn [v3] ...))

このようなロジックを関数で囲み、それを使用してすべての記事をマップできます。

于 2016-05-31T12:10:02.433 に答える