评论者:alexmiller
我们必须考虑向量或其他关联数据结构,除了地图。我也希望不要有标志,而是使其能够删除多个。
有类似
(update-in [{:foo 1}] [0] dissoc :foo)
我们会剩下 {{[{}]}},因此现有的方式确实留下了空集合。
我还查看了一些现有的 dissoc-in 实现,例如 core.incubator、taoensso.encore、clj-http、medley、useful、plumbing 等。大多数是针对单个键路径的,并留下空集合 - 这些似乎主要来自孵化器版本。encore 一个通过将 key 路径与要 disoc 的最终叶键分开来处理多个路径(可变参数)。medley、useful 和 plumbing 这些仅适用于 map,并移除空 map。
我想象不出我们会在 core 中添加特定于 map 的版本(因为其他 -in 函数都是通用的),因此我得出结论,我们需要一个允许留下空集合的 dissoc-in。鉴于这一点,我不确定 dissoc-in 是否提供了超过 update-in + dissoc 的足够价值以添加到 core 中,尤其是考虑到它存在于各种实用库中(许多情况下的语义不同)。我们可能会打破(至少是不方便)许多现有的 dissoc-in 实现。我将为此留下供评论,但我倾向于在这一点上拒绝此增强。