我遇到了一个错误,而使用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
peek
的文档说peek
接受一个集合对象。但是序列也是集合,对吧?但peek
不支持。那么,这是文档错误吗?还是我遗漏了什么?
peek
适用于实现clojure.lang.IPersistentStack
(如clojure.lang.Persistent*
)的"持久类型",根据tomby42, 8.2年前的文档注释。
Clojure的doc字符串函数peek
在Clojure 1.10.1(当前撰写本文时)是:"对于列表或队列,相同的第一个,对于向量,相同的,但更多比最后更有效率。如果集合为空,则返回nil。">
在对peek关于Clojurians Slack的文档的一些讨论中,它听起来可能像"集合"这个词;在peek的文档字符串中引用前面提到的列表、队列或向量的集合类型之一,而不是任意的Clojure集合。也就是说,它应该被解释为好像单词"集合"一样。被替换为短语"列表、队列或向量"。