评论者:alexmiller
我们必须考虑除了地图之外的其他向量或关联数据结构。我也不想设置标志,而是留为可变参数以删除多个。
使用等效于
(update-in [{:foo 1}] [0] dissoc :foo)
我们最终会留下{{[{}()]}},所以现有的这种方法确实会留下空集合。
我还查阅了一些现有的dissoc-in实现——如core.incubator,taoensso.encore,clj-http,medley,useful,plumbing等。大部分使用单个键路径并且留下空集合——这些似乎大多源自incubator版本。Encore使用多个路径,通过将键路径与最终要删除叶键分开来实现(可变参数)。Medley、useful和plumbing只针对map,并删除空map。
我想象不出我们会把这个在核心中写成专门针对map的版本(因为其他-in函数都是通用的),所以我得出结论,我们需要一个允许留下空集合的dissoc-in。鉴于这一点,我不确定dissoc-in是否比update-in + dissoc提供了足够的价值,值得在此时添加到核心中,特别是鉴于它存在于各种实用库中(在很多情况下具有不同的语义)。这样我们可能会破坏(或至少让)现有dissoc-in实现的用户感到不便。我将对此保持开放态度,但此时我倾向于拒绝这个增强功能。