首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Luminus/Compojure中用map处理多个字段

在Luminus/Compojure中用map处理多个字段
EN

Stack Overflow用户
提问于 2016-05-31 11:48:33
回答 2查看 32关注 0票数 1

我有这个:

代码语言:javascript
复制
(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?)     

我还想对其他领域进行预处理。我怎么才能正确地做到这一点?我的意思是,既然我已经有了变量:文章和函数映射,那么对于其他字段,比如:field2 2和field3,如何再进行映射呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-31 12:10:02

使用线程宏:

代码语言:javascript
复制
(def m {:field1 1
        :field2 2
        :field3 3})

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

相当于:

代码语言:javascript
复制
(update
  (update 
    (update m :field1 (fn [v1] ...))
    (fn [v2] ...))
  (fn [v3] ...))

您可以将这样的逻辑包含在一个函数中,并使用它来映射所有的文章。

票数 0
EN

Stack Overflow用户

发布于 2016-05-31 12:48:39

您还可以简化这些更新:

代码语言:javascript
复制
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}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37544934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档