2015-06-10 34 views
0

祝函數序列應用於數據,像管: 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 
)) 

回答

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 ))))