如何解决peek 不支持某些序列
我在将 peek
函数与 seq 对象一起使用时遇到错误。这对我来说有点令人惊讶,因为我期望 peek
可以与任何 seq 对象一起使用。
(def r0
(re-seq #"\w+" "foo bar"))
(identity r0)
;; ("foo" "bar")
(peek r0)
; (err) Execution error (ClassCastException) at (REPL:1).
(peek '("foo" "bar"))
;; "foo"
(= r0 '("foo" "bar"))
;; true
(type r0)
;; clojure.lang.Cons
(type '("foo"))
;; clojure.lang.PersistentList
documentation of peek
表示 peek
接受一个集合对象。但是序列也是集合,对吧?但是 peek
不支持它。那么,这是一个文档错误吗?还是我错过了什么?
解决方法
根据 tomby42 8.2 年前在文档说明中的说法,
peek
与“实现 clojure.lang.IPersistentStack
(如 clojure.lang.Persistent*
)的持久类型”一起使用。
Clojure 在 Clojure 1.10.1 中函数 peek
的文档字符串(在撰写本文时为当前版本)是:“对于列表或队列,与第一个相同,对于向量,相同,但更多
比上一个更有效率。如果集合为空,则返回 nil。"
在有关 Clojurians Slack 的 peek 文档的一些讨论中,听起来可能 peek 的文档字符串中的“集合”一词指的是前面提到的列表、队列或向量的集合类型之一,而不是任意的 Clojure 集合。也就是说,它应该被解释为“集合”一词被替换为短语“列表、队列或向量”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。