我是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
有人可以指出这里有什么问题吗?
非常感谢。
答案 0 :(得分:4)
如错误所述,您将两个参数传递给first
,例如
(first monthlyTargets :month)
何时需要:
(let [month (:month (first monthlyTargets))
...])
您可以使用解构一次匹配所有值:
(let [{:keys [month year name]} (first monthlyTargets)
...])