我在迭代传递给以下函数的函数参数时遇到了困难。
(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
我不知道如何迭代传入的参数,并将每个元素作为单独的值,然后传递给另一个函数。
我最终使用代码的目标是比较一个日期列表,并在其中找到最古老的日期。这段代码只是尝试将每个参数解析为日期。
发布于 2019-10-09 04:51:53
(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")
这个版本应该能用。
您在原始代码中编写了(for [i [dates]]
,它的工作方式是您无意中指定的:
dates
向量[]
进行迭代,其中dates
已经是一个序列。dates
,这是一个试图将ArraySeq
解析为CharSequence
并失败的dates
。H 216G 217
发布于 2019-10-15 01:44:37
我想我应该更新答案,因为我已经找到了另一种方法来实现这一点,而不必迭代args:
(defn iterateDates
[& dates]
(let [ukFormatter (java.time.format.DateTimeFormatter/ofPattern "dd-MM-yyyy")]
(map #(java.time.LocalDate/parse % ukFormatter) dates)))
map函数将日期格式应用于日期的每个元素,并将其作为新列表返回。
https://stackoverflow.com/questions/58303826
复制相似问题