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
の対応物も同じような単項バージョンを持っていないのですか?
'(削除するにはいくつかのマップアイテムを削除する)'を考えてみましょう。本当に* items-to-removeが空のときにエラーになり、そのイディオムを使用している誰かを条件付きでラップするように強制しますか? –
'+'も0引数と1引数のバージョンを持つ方法とまったく同じです。 –
@CharlesDuffyそれは良い点です。以前は関数のどれにも 'apply'を使ったことがないので、クリックしなかったと思います。あなたが答えを書くなら、私はそれを受け入れます。 – Carcigenicate