评论者: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与要删除的最终叶子键分开来处理多个路径(可变数量)。Medley、useful和plumbing版本仅限于map,并删除空map。
我难以想象我们会在core中创建一个特定的map版本(因为其他-in函数是通用的),因此我得出结论,我们需要一个保留空集合的dissoc-in。考虑到这一点,我不确定dissoc-in是否比update-in + dissoc提供足够的价值,以至于值得在此处将其添加到core中,尤其是它已存在于多种实用库中(在许多情况下,语义有所不同)。这样,我们可能会打断(或至少不便)许多现有dissoc-in使用者。我将留此问题供评论,但我的想法是拒绝这个增强功能。