评论由:alexmiller
我们必须考虑除了map以外的向量或关联数据结构。我也希望不使用标志,而是允许一次移除多个。
使用类似以下的方式
(update-in [{:foo 1}] [0] dissoc :foo)
我们将得到{{[{}]}},所以现有的方式确实会留下空集合。
我还查看了一些现有的dissoc-in实现,例如core.incubator、taoensso.encore、clj-http、medley、useful、plumbing等。大多数与单个key-path一起工作,并留下空集合——这些似乎主要来源于incubator版本。Encore版本通过将key path与要移除的最终leaf keys分离开来处理多个路径(变元)。Medley、useful和plumbing版本仅适用于map并且移除空map。
我想象不出我们会在core中创建特定于map的版本(since all the other -in functions are generic)并因此得出结论我们需要一个允许留下空集合的dissoc-in。考虑到这一点,我不太确定dissoc-in与update-in + dissoc相比是否有足够的价值值得添加到core中,尤其是在它存在于各种工具库中(很多情况下语义不同)。那么我们可能会破坏(或至少给)现有dissoc-in实现的用户带来不便。我将对此公开征求评论,但我想在这里拒绝这个增强功能。