评论者:alexmiller
我们必须考虑除映射以外的向量或关联数据结构。我也更喜欢不使用标志,而是将其留给变长以移除多个。
使用类似以下等效方法
(update-in [{:foo 1}] [0] dissoc :foo)
我们会剩下{{[{}]}},所以现有的方法确实会留下空集合。
我还研究了现有的某些现有的dissoc-in实现 - core.incubator、taoensso.encore、clj-http、medley、useful、plumbing等。大多数使用单个key-path并留下空集合 - 这些似乎主要来自孵化器版本。Encore版本通过将key path与要删除的最后叶子键分开来使用多个路径(变长)。Medley、useful和plumbing版本仅对映射进行操作并删除空映射。
我想象不出,我们会在核心中制作一个特定于map的版本(因为其他-in函数是通用的),因此我得出结论,我们需要一个可以留下空集合的dissoc-in。鉴于这一点,我不确定dissoc-in相对于update-in + dissoc提供的价值是否足够,以至于值得在此阶段添加到核心中,特别是既然它存在于各种实用程序库中(在许多情况下具有不同的语义)。那么,我们可能会破坏(或者至少会打扰)许多现有dissoc-in impls的用户。我将对此保持开放,但我倾向于在此阶段拒绝此增强功能。