将一系列函数应用于数据

时间:2015-06-10 23:52:03

标签: clojure

我希望将一系列函数应用于数据,例如pipe: http://ramdajs.com/0.14/docs/#pipe

我知道它有->>->,我也很难定义内部函数

(defn create
  ([code error] {:statusCode code :error error})
  ([code error & [message data]]
   (create code error) - I want pipe it result
                       to a function that check if 
                       message if defined then merge with
                       {:message message}, then
                       apply to a function that checks if data
                       is defined an merge with it
))

1 个答案:

答案 0 :(得分:2)

您可以使用cond-> threading macro仅合并已定义的变量:

(defn create
  ([code error]
    {:statusCode code :error error})
  ([code error & [message data]]
    (cond-> (create code error)
      message (assoc :message message)
      data    (assoc :data    data   ))))

或者您可以定义小型assoc-if-defined帮助程序并使用普通的->线程宏:

(defn- assoc-if-defined
  [m k v]
  (if (nil? v) m (assoc m k v)))

(defn create
  ([code error]
    {:statusCode code :error error})
  ([code error & [message data]]
    (-> (create code error)
        (assoc-if-defined :message message)
        (assoc-if-defined :data    data   ))))