在 Luminus/Compojure 中使用地图处理多个字段
Processing multiple fields with map in Luminus/Compojure
我有这个:
(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)再次映射?
使用线程宏:
(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] ...))
您可以将这样的逻辑包含在一个函数中,并用它来映射所有文章。
您还可以通过缩减来概括这些更新:
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}
我有这个:
(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)再次映射?
使用线程宏:
(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] ...))
您可以将这样的逻辑包含在一个函数中,并用它来映射所有文章。
您还可以通过缩减来概括这些更新:
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}