评论由:alexmiller发表
我们必须考虑除了map之外的其他向量或关联数据结构。我也希望不要使用标志,而是开放以删除多个值。
有以下类似示例
(update-in [{:foo 1}] [0] dissoc :foo)
我们将得到{{[{}]}},因此当前的这种方法确实会留下空集合。
我还看了一些现有的dissoc-in实现 - core.incubator, taoensso.encore, clj-http, medley, useful, plumbing等。大多数只使用单个键路径并留下空集合 - 这些大多来自孵化器版本。Encore以通过分离键路径和要从其删除的最终叶子键来与多个路径一起工作(可变)。Medley, useful和plumbing只处理map并删除空map。
我不能想象我们会为core创建一个特定的映射版本(因为所有其他-in函数都是通用的),因此我得出结论,我们需要一个dissoc-in,它留下空集合。考虑到这一点,我不确定dissoc-in是否提供了比update-in + dissoc更多的价值,从而值得添加到core中,特别是由于它在各种实用程序库中都存在(很多时候语义不同)。这样我们可能会破坏(或者至少不便)许多现有的dissoc-in实现的使用者。我将为此开放评论,但我觉得在此时拒绝此增强功能。