评论由: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是否提供了足够的附加价值,以至于值得在此阶段添加到核心中,尤其是鉴于它存在于各种实用库中(在许多情况下具有不同的语义)。这样我们可能会破坏(或者至少让)现有的dissoc-in实现用户感到不便。我将保留此项供评论,但此时我倾向于拒绝此增强功能。