评论由: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目前与update-in + dissoc相比提供了多大的价值才值得添加到核心中,尤其是在它已经存在各种工具库中(有时语义不同)。这样我们可能会打破(或至少不方便)许多现有dissoc-in实现的使用者。我将此留作评论,但目前我倾向于不通过此增强。