评论者:alexmiller
我们必须考虑向量以及其他非映射类型的数据结构。我还更倾向于不使用标志,而是允许展开符以移除多个元素。
例如,像一个等效的函数
(update-in [{:foo 1}] [0] dissoc :foo)
这样,我们只剩下了{{[{}]}},所以现有的方法确实会留下空集合。
我还查看了一些现有的dissoc-in实现,如core.incubator、taoensso.encore、clj-http、medley、useful、plumbing等。大多数使用单个键路径,并留下空集合——这些主要源于incubator版本。Encore通过将键路径与最终要移除的叶子键分开来处理多个路径。Medley、useful和plumbing对仅针对映射,并移除空映射。
我不敢想象我们会在核心库中实现一个特定于映射的版本(因为其他所有-in函数都是通用的),因此我得出结论,我们需要一个允许留下空集合的dissoc-in。鉴于这一点,我不确定dissoc-in相对于update-in + dissoc提供了多少价值,以至于值得现在将其添加到核心库中,特别是在它已经存在于各种实用库中(在很多情况下具有不同的语义)。这样,我们可能会破坏(或至少给)现有dissoc-in实现的使用者带来不便。我将将此保持开放以供评论,但我的想法是现在不实施此增强。