请在 2024 状态 Clojure 调查! 中分享您的想法。

欢迎!有关如何操作的更多信息,请参阅关于 页面。

0
Clojure

例如

Clojure 1.3.0
user=> (require '(link: clojure.zip :as z))
nil
user=> (-> (z/seq-zip (list 1)) z/down z/remove)
NullPointerException clojure.core/with-meta (core.clj:211)

可能 seq-zip 的 make-node 函数应该是

(fn (link: node children) (with-meta (or children ()) (meta node)))

4 个答案

0

评论由:glchapman 添加

也应该更新 zipper 的文档字符串来表明 children 参数可以为 nil。

0

评论由:chbrown 添加

4 年后,我也遇到了这个问题。

有解决方案吗?比如,是否有从单子分支中删除元素的方法?

0

评论由:alexmiller 添加

很高兴看到一个补丁(尽管它还需要回填一些测试)。

一个解决方案可能如下

(-> (z/seq-zip (list 1)) (z/edit #(drop 1 %)) z/node)

或者,您可以使用另一个类似于 hara.zip 的 zipper 库,该库没有 remove,但是可以用 delete-right 工作删除右边的元素

(-> (z/seq-zip (list 1)) z/down z/delete-right z/up z/node)

0
参考:https://clojure.atlassian.net/browse/CLJ-941(由 glchapman 报告)
...