【发布时间】:2020-02-06 18:32:00
【问题描述】:
我在迭代传递给以下函数的函数参数时遇到问题。
(defn iterateDates
[& dates]
(let [ukFormatter (java.time.format.DateTimeFormatter/ofPattern "dd-MM-yyyy")]
(for [i [dates]]
(java.time.LocalDate/parse i ukFormatter))))
(iterateDates "09-10-2019" "10-10-2019" "11-10-2019")
然而,当调用它时,会返回以下错误:
Error printing return value (ClassCastException) at clojure.core/getOldestDate$iter$fn$fn (core.clj:96).
clojure.lang.ArraySeq cannot be cast to java.lang.CharSequence
我不确定如何迭代传入的参数并将每个元素作为单独的值,然后可以将其传递给另一个函数。
我最终使用代码的目标是比较日期列表并找到其中最旧的日期。此代码只是尝试将每个参数解析为日期。
【问题讨论】:
-
此代码不会运行。您在
(for [i [dates)]有一个括号不匹配。请发布实际代码。此外,for的主体包裹在两对括号中,这将导致parse的返回被作为函数调用。这是你的意图吗?另外,请发布完整的堆栈跟踪。在第一次刷机时,该错误似乎并非源于此代码。 -
我一直在 REPL 中运行它,这就是我得到错误的地方,正常运行它不会产生错误,但也不会产生输出。
-
我想你的意思是
(for [i dates]。我不知道这将如何导致该错误,但您现在将整个dates序列传递给parse。
标签: java clojure functional-programming