我遇到一个错误,当使用一个序列化对象的peek函数。这对我来说有点令人惊讶,因为我原以为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.PersistentListdocumentation of 声明peek接受一个集合对象。但是序列也是集合,对吗?但peek不支持它。那么,这是一个文档错误吗?或者我还漏掉了什么?
发布于 2021-02-10 20:05:15
根据tomby42的说法,peek在8.2年前的文档注释中使用了“实现clojure.lang.IPersistentStack的持久类型(如clojure.lang.Persistent*)”。
发布于 2021-02-11 02:33:14
Clojure 1.10.1中函数peek的文档字符串是:“对于列表或队列,与first相同,对于向量,与last相同,但比last更有效。如果集合为空,则返回nil。”
在讨论peek的文档时,似乎peek的文档字符串中的“集合”是指前面提到的列表、队列或向量的集合类型之一,而不是任意的Clojure集合。也就是说,它的解释应该与单词“集合”替换为短语“列表、队列或向量”相同。
https://stackoverflow.com/questions/66135825
复制相似问题