请分享您的想法,参加 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: 节点 子节点) (with-meta (or 子节点 ()) (meta 节点)))

4 答案

0投票

评论者:glchapman

也可能是应该更新 zipper 的文档字符串以指出子节点参数可以是 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提供信息)
...