评论者: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实现的用户。我将为此保留评论,但我的想法是暂缓此增强功能。