2

在使用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同行没有类似的一元版本?

4

1 回答 1

5

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

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

于 2017-05-26T23:13:22.277 回答