Angenommen ich eine Platte haben, die „funktionsähnlichen“, zumindest in dem Sinne ist, dass es eine Operation darstellt, die auf einige Argumente angewendet werden könnte.Ist es eine gute Übung für einen Clojure-Datensatz, IFn zu implementieren?
Ich kann es als eine Funktion funktioniert clojure.lang.IFn
durch die Umsetzung, so etwas wie:
(defrecord Func [f x]
clojure.lang.IFn
(invoke [this arg]
(f x arg))
(applyTo [this args]
(apply f x args)))
((->Func + 7) 1)
=> 8
(ja ich weiß, dass ich nur eine minderwertige Version von partial
reimplementiert .... es ist nur ein Beispiel: -))
Macht eine Aufzeichnung implementieren eine gute Praxis oder nicht?
Irgendwelche Fallstricke zu diesem Ansatz?
Ein Datensatz scheint 'clojure.lang.Associative', aber nicht' clojure.lang.IFn' zu implementieren. So können Sie tun '(: a einige-record)', um das Schlüsselwort nachzuschlagen, aber nicht '(irgendein-Rekord: x)' – mikera
Präzise. Ich habe es überprüft, aber ich habe nichts Genaues von Rich gehört. Vielleicht ist es nur ein Versehen. –
+1 gegeben, weil @mikers Frage nach Datensätzen und nicht Typen fragt. Da Datensätze bereits eine kartenähnliche Semantik haben, wäre das verwirrend, für Typen ist dieses Problem nicht vorhanden. – ponzao