args(2)的错误数量传递给:core / first

时间:2016-04-08 09:31:14

标签: clojure jvm-languages arity

我是Clojure的新手,我在迭代数据时遇到了一些问题。

我写的代码如下:

(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"}
])

我在(if(first monthlyTargets)语句中得到错误的args错误数。

例外是:

  

ArityException传递给:core / first的args(2)错误的数量   clojure.lang.AFn.throwArity

有人可以指出这里有什么问题吗?

非常感谢。

1 个答案:

答案 0 :(得分:4)

如错误所述,您将两个参数传递给first,例如

(first monthlyTargets :month)

何时需要:

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

您可以使用解构一次匹配所有值:

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