评论者:alexmiller
我们必须考虑向量或其他非映射的关联数据结构。我也更喜欢不使用标志,而是留为可变参数来删除多个。
使用等效的如
(update-in [{:foo 1}] [0] dissoc :foo)
我们会剩下 {{[{}]}},因此现有的方式确实会留下空集合。
我还查看了一些现有的 dissoc-in 实现 - core.incubator, taoensso.encore, clj-http, medley, useful, plumbing 等。大多数都在单个键路径上工作,并留下空集合 - 这些似乎大多源自 incubator 版本。Encore 版本通过将键路径与最终的叶键分开以 dissoc (可变参数)来处理多个路径。Medley, useful 和 plumbing 版本仅适用于映射,并删除空映射。
我无法想象我们会在核心(-Core)中做一个特定于映射的实现(因为所有其他-in 函数都是通用的),因此我得出结论,我们需要一个能够留下空集合的 dissoc-in。鉴于这一点,我不确定 dissoc-in 能否提供足够的价值超过 update-in + dissoc 以值得在此时添加到核心中,特别是鉴于它存在于各种实用程序库中(在很多情况下具有不同的语义)。我们可能会破坏(或至少使)许多现有 dissoc-in 实现的用户感到不便。我将为此留下评论,但此时我倾向于拒绝这个增强功能。