评论者:alexmiller
我们必须考虑向量或除映射之外的其他关联数据结构。我也不希望有标志位,而是希望允许变长以移除多个。
使用类似的函数如
(update-in [{:foo 1}] [0] dissoc :foo)
我们最终将得到 {{[{}]}},所以目前的方法确实会留下空集合。
我还查看了一些现有的 dissoc-in 实现 - core.incubator、taoensso.encore、clj-http、medley、useful、plumbing 等。大多数都使用单个键路径,并留下空集合——这些似乎主要源自孵化器版本。Encore 版本通过将键路径与最终的叶键分开来处理多个路径(变长)。medley、useful 和 plumbing 则是仅使用映射,并移除空映射。
我无法想象我们会在核心中创建一个特定于映射的版本(因为其他 -in 函数都是通用的),因此我得出结论,我们需要一个允许留下空集合的 dissoc-in。考虑到这一点,我怀疑 dissoc-in 是否提供了比 update-in + dissoc 更多的价值,以至于值得此时添加到核心中,尤其是考虑到它已经存在于各种实用库中(在许多情况下具有不同的语义)。因此,我们可能破坏(或至少不便)许多现有 dissoc-in 实现的用户。我将将其留待评论,但现在我的想法是拒绝此增强功能。