2016-04-08 38 views
1

我是Clojure的新手,我在迭代數據時遇到了一些問題。錯誤的參數數量(2)傳遞給:core/first

我寫的代碼如下:

(defn save-monthly-targets 
    "Parse Monthly Targets Data and Save" 
    [monthlyTargets] 
    (println "Save Monthly " monthlyTargets) 
    (if (first monthlyTargets) 
    (let [month (first monthlyTargets :month) 
     year (first monthlyTargets :year) 
     name (first monthlyTargets :name)] 
     (do 
      (println "Calling Save Method" month) 
      (users/set-monthly-target month year name) 
      (save-monthly-targets (rest monthlyTargets)))))) 

當我調用該函數:

(save-monthly-targets [ 
    {:month "May", :year "2021", :target "1200"}, 
    {:month "May", :year "2016", :target "1200"} 
]) 

我得到了(如果(第一monthlyTargets)語句錯號碼ARGS錯誤的。

唯一的例外是:

ArityException數args來傳遞錯誤(2):核心/第一 clojure.lang.AFn.throwArity

有人能指出這裏有什麼問題?

非常感謝。

回答

3

由於錯誤狀態,您將兩個參數傳遞給first例如

(first monthlyTargets :month) 

當你想:

(let [{:keys [month year name]} (first monthlyTargets) 
     ...]) 

(let [month (:month (first monthlyTargets)) 
     ...]) 

您可以一次使用解構匹配所有的值