评论由:alexmiller 撰写
我们必须考虑向量或关联数据结构(不仅是映射)。我也不想使用标志,而是想要允许用变长参数移除多个。
使用类似以下的操作
(update-in [{:foo 1}] [0] dissoc :foo)
我们将得到 {{[{}]}},所以现有的这种做法确实会留下空集合。
我还查看了一些现有的 dissoc-in 实现——core.incubator、taoensso.encore、clj-http、medley、useful、plumbing等。大多数使用单个键路径,并保留空集合——这些大多源自孵化版本。Encore 使用多个路径通过将键路径与最后的叶子键分离来进行 dissoc 操作(变长参数)。Medley、useful 和 plumbing 仅支持映射并且移除空映射。
我无法想象在核心库中创建此类映射特定版本(因为其它所有 -in 函数都是通用的)并且因此我得出结论,我们需要一个在某些情况下要求修改的核心库 dissoc-in,特别是鉴于它在多种实用库中存在(在很多情况下有不同语义)。这样我们可能会打破(或者至少给现有 dissoc-in 实现的用户带来不便)。我将在这里开放对此事的评论,但我倾向于在这个阶段拒绝此增强功能。