我在想,《clojure.zip/next》的文档字符串是否可能对一些人产生误导,内容如下:
将层次结构中的位置移动到下一个,深度优先。当到达末尾时,返回可以通过end?检测的特定位。如果已经在末尾,则保持在结尾位置。
一些人可能会在没有更多信息的情况下认为zipping器的末尾是zipping器的最后一个节点,并在那个点调用next
将会使zipping器定位在最后一个节点上。
据我理解(这可能并不远),当你在zipping器的最后一个节点之后调用next
时,会出现Clojure zipping器的末尾状态,此时zipping器不再可导航或更新。
你仍然可以调用root
(或node
,在这种情况下与root
等效)和end?
,但除此之外,我想,胜负已定。
当在末尾时,有效的调用是end?、next和root。
- 如果你觉得文档字符串不是一个恰当的位置,那么zipping器概述或许可以更加详细地阐述?
- clojure.zip
以下是一些显示行为的相关代码
(require '[clojure.zip :as czip])
(->> [1 2 3]
czip/vector-zip
(iterate czip/next)
(take 10)
(map (juxt czip/node czip/end?)))
;; => ([[1 2 3] false]
;; [1 false]
;; [2 false]
;; [3 false]
;; [[1 2 3] true]
;; [[1 2 3] true]
;; [[1 2 3] true]
;; [[1 2 3] true]
;; [[1 2 3] true]
;; [[1 2 3] true])
《next》的文档字符串可能需要更多地解释“末尾”是什么,到达末尾状态意味着什么。可能是这样的:
将层次结构中的位置移动到下一个,深度优先。
当到达末尾(在最后一个节点之后)时,会返回可通过end?检测的特定位。如果已经到达末尾,将保持在那个位置。
在末尾时,有效的调用是end?、next和root。
如果文档字符串不是一个合适的位置,那么zipping器概述或许可以提供更详细的解释?