1

私は 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 monthTargets) ステートメントで間違った数の引数エラーが発生します。

例外は次のとおりです。

ArityException 間違った数の引数 (2) が渡されました: core/first clojure.lang.AFn.throwArity

誰かがここで間違っていることを指摘できますか?

どうもありがとうございました。

4

1 に答える 1

4

firstエラーが示すように、たとえば2つのパラメーターを渡しています

(first monthlyTargets :month)

君が望む時に:

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

分解を使用して、すべての値を一度に一致させることができます。

(let [{:keys [month year name]} (first monthlyTargets)
      ...])
于 2016-04-08T09:35:12.390 に答える