评论由: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的特定版本(因为所有的-in函数都是通用的),因此我得出结论,我们可能需要一个允许空集合的dissoc-in。鉴于这一点,我不确定dissoc-in相对于update-in + dissoc提供了多少价值,值得我们在此阶段添加到核心中,特别是在它存在于各种实用库中(在许多情况下语义不同)。我们可能打破了(或至少不便了)许多现有dissoc-in实现的用户。我将对此进行评论,但我倾向于在此阶段不采取此增强措施。