评论由:alexmiller 提供
我们必须考虑向量或其他关联数据结构,而不仅仅是映射。我也希望不要使用标志,而是保留它们以便去除多个数据。
使用类似以下的方式
(update-in [{:foo 1}] [0] dissoc :foo)
我们将得到 {{[{}]}},所以现有的方法确实会留下空集合。
我还看了看现有的 dissoc-in 实现——core.incubator、taoensso.encore、clj-http、medley、useful、plumbing 等。大多数使用单个键路径,并留下空集合——这些似乎大部分来自孵化器版本。Encore 一个通过将键路径从最终要 dissoc 的叶子键中分离出来来处理多个路径(可变数量)。Medley、Useful 和 Plumbing 的是仅适用于映射的,并移除空映射。
我想象不出我们会在 core 中创建一个特定于映射的版本(因为所有其他的-in 函数都是通用的),因此我得出结论,我们需要一个 dissoc-in,它可以留下空集合。鉴于这一点,我不确定 dissoc-in 是否提供了比 update-in + dissoc 更多的价值,值得添加到核心中,特别是在它已经在各种实用库中存在(很多情况下语义不同)的情况下。这样我们可能会打破(或至少使)现有 dissoc-in 实现的用户感到不便。我将此留作评论,但我的想法是现在拒绝这个增强功能。