In clojure, warum benötigt assoc zusätzlich zu einer map Argumente, aber nicht dissozieren?

8

In clojure,

%Vor%

löst eine Arity-Ausnahme aus, aber

%Vor%

nicht. Warum? Ich hätte erwartet, dass entweder beide eine Ausnahme auslösen oder beide keine Änderungen vornehmen, wenn keine Schlüssel oder Werte angegeben werden.

BEARBEITEN : Ich sehe eine Begründung dafür, diese Formen zuzulassen. es bedeutet, dass wir assoc oder disso auf eine möglicherweise leere Liste von Argumenten anwenden können. Ich verstehe nur nicht, warum man das zulassen sollte und der andere nicht, und ich bin neugierig, ob es einen guten Grund dafür gibt, dass ich vermisse.

    
Rob Lachlan 23.04.2013, 16:53
quelle

2 Antworten

4

Ich persönlich denke, dass das Fehlen von 1-arity ass ist ein Versehen: Immer wenn eine nachgestellte Liste von Parametern erwartet wird ( & stuff ), sollte die Funktion normalerweise mit Nullparametern arbeiten können, um apply es zu einer leeren Liste.

Clojure hat viele andere Funktionen, die korrekt mit Null-Argumenten arbeiten, z.B. + und merge .

Auf der anderen Seite hat Clojure andere Funktionen, die keine Null-Nachlaufparameter, z. conj .

Also ist die Clojure-API in dieser Hinsicht etwas inkonsequent ...

    
mikera 24.04.2013, 13:36
quelle
0

Dies ist keine autoritative Antwort, sondern basiert auf meiner Prüfung und Betrachtung von ClojureDocs:

dissoc bedeutet, dass Sie in der Lage sind, ein Argument, eine Karte, zu übergeben. In diesem Fall wird kein Schlüssel / Wert aus der Karte entfernt.

%Vor%

assoc hat keine ähnliche Ähnlichkeit. Das heißt, assoziieren erfordert eine Karte, einen Schlüssel und einen Wert.

Nun, warum das so gestaltet wurde, ist eine andere Sache, und wenn Sie keine Antwort mit diesen Informationen erhalten - ich hoffe, Sie tun - dann schlage ich vor, ein Kopfgeld anzubieten oder auf Clojures Google Groups zu gehen und diese Frage zu stellen .

Hier ist die Quelle.

%Vor%     
octopusgrabbus 23.04.2013 19:45
quelle

Tags und Links