在使用时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))))
Run Code Online (Sandbox Code Playgroud)
然后我注意到它disj
有一个一元版本以及相同的定义.
一元版本的目的是什么?我可以看到的唯一潜在用途可能是它们一起使用时apply
,但我不知道这有什么用处.为什么他们conj
和assoc
同行没有类似的一元版本呢?
考虑(apply dissoc some-map items-to-remove)
.
如果一元形式不存在,items-to-remove
则为空将是一个错误,因此在进行此调用之前需要始终检查其长度.