java - Clojure 中的迭代函数参数
问题描述
我在迭代传递给以下函数的函数参数时遇到问题。
(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
我不确定如何迭代传入的参数并将每个元素作为一个单独的值,然后可以将其传递给另一个函数。
我最终使用代码的目标是比较日期列表并在其中找到最旧的日期。此代码只是尝试将每个参数解析为日期。
解决方案
(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
,它是一个AraySeq
。 java.time.LocalDate/parse
试图解析ArraySeq
为 aCharSequence
并失败。
推荐阅读
- single-sign-on - 如何阻止 IE11 缓存安全上下文
- .net - 使用 Noda Time 从本地日期和时区查找最接近的有效全球日期
- java - 当我运行多个测试用例时,TestNG 并行执行总是失败,其中只有一个测试脚本通过
- node.js - Mongoose - 数组被保存为字符串
- php - XAMPP 上没有出现任何帖子
- javascript - Destructuring within object literal with alias
- javascript - Zoom towards are mouse is over
- python - Add a column according to other columns in a matrix. [python]
- r - 将前一个值的一部分与其下一个值累积相加
- selenium-chromedriver - Exception handling with Realbrowserlocusts