速览不支持某些序列

  • 本文关键字:不支持 clojure
  • 更新时间 :
  • 英文 :


我遇到了一个错误,而使用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集合。也就是说,它应该被解释为好像单词"集合"一样。被替换为短语"列表、队列或向量"。

相关内容

  • 没有找到相关文章

最新更新