在使用dissoc
時,我注意到它有一個似乎沒有任何操作的單一版本。我檢查了來源,事實證明這只是身份的功能:使用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
對應有相似的一元版本?
考慮'(應用dissoc某些地圖項目去除)'。當'items-to-remove'爲空時,你是否真的*希望它是一個錯誤,從而迫使任何使用該習語的人將其包裝在條件中? –
它和'+'也有0和1參數版本完全一樣。 –
@CharlesDuffy這是一個很好的觀點。我認爲它沒有點擊,因爲我以前從未使用過任何功能。如果你寫一個答案,我會接受。 – Carcigenicate