使用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
一起使用时,但我看不出这有什么用。为什么他们的 conj
和 assoc
同行没有类似的一元版本?
考虑 (apply dissoc some-map items-to-remove)
。
如果一元形式不存在,items-to-remove
为空将是一个错误,因此在进行此调用之前需要始终检查其长度。
在使用 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
一起使用时,但我看不出这有什么用。为什么他们的 conj
和 assoc
同行没有类似的一元版本?
考虑 (apply dissoc some-map items-to-remove)
。
如果一元形式不存在,items-to-remove
为空将是一个错误,因此在进行此调用之前需要始终检查其长度。