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

Wrong number of args (2) passed to: core/first

我是 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) 语句中得到了错误的参数数量错误。

例外情况是:

ArityException Wrong number of args (2) passed to: core/first clojure.lang.AFn.throwArity

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

非常感谢。

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

(first monthlyTargets :month)

当你想要的时候:

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

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

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