使用dissoc的一元版本?

Use of dissoc's unary version?

在使用 dissoc 时,我注意到它有一个似乎没有做任何事情的一元版本。查了下源码,原来只是恒等函数:

(defn dissoc
  ([map] map)
  ([map key]
   (. clojure.lang.RT (dissoc map key)))
  ([map key & ks]
   (let [ret (dissoc map key)]
     (if ks
       (recur ret (first ks) (next ks))
       ret))))

然后我注意到 disj 也有一个定义相同的一元版本。

一元版本的目的是什么?我能看到的唯一潜在用途可能是当它们与 apply 一起使用时,但我看不出这有什么用。为什么他们的 conjassoc 同行没有类似的一元版本?

考虑 (apply dissoc some-map items-to-remove)

如果一元形式不存在,items-to-remove为空将是一个错误,因此在进行此调用之前需要始终检查其长度。