Während ich dissoc
nutzte, bemerkte ich, dass es eine unäre Version hatte, die nichts zu tun schien. Ich habe die Quelle, und es stellt sich heraus, es ist nur die Identitätsfunktion:Verwendung der unären Version von disso?
(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))))
dann bemerkte ich, dass disj
eine monadische Version als auch mit der gleichen Definition hat.
Was ist der Zweck der unären Versionen? Die einzige mögliche Verwendung, die ich sehen kann, ist vielleicht, wenn sie mit apply
verwendet werden, aber ich sehe nicht, wie das nützlich wäre. Und warum haben ihre conj
und assoc
Pendants ähnliche unäre Versionen?
Betrachten Sie '(disso Einige-Karte-Elemente zu entfernen)'. Willst du wirklich, dass es ein Fehler ist, wenn 'zu entfernende Elemente 'leer sind, und damit jeden zwingen, dieses Idiom zu verwenden, um es in einen bedingten zu verpacken? –
Es ist genau das gleiche wie '+' hat auch 0- und 1-Argument-Versionen. –
@CharlesDuffy Das ist ein guter Punkt. Ich glaube, es hat nicht geklickt, da ich noch nie zuvor eine der Funktionen angewendet habe. Ich akzeptiere das, wenn du eine Antwort schreibst. – Carcigenicate