function - ¿Es una buena práctica que un registro de Clojure implemente IFn?
functional-programming record (1)
Me sorprende que no lo haya hecho ya. Se supone que los registros son "una implementación completa de un mapa persistente" . Entonces, para responder a tu pregunta, esperaría que fuera una función de sus teclas, como lo es un mapa; Cualquier otra cosa sería bastante sorprendente.
Supongamos que tengo un registro que es "similar a una función", al menos en el sentido de que representa una operación que podría aplicarse a algunos argumentos.
Puedo hacer que funcione como una función implementando clojure.lang.IFn
, algo como:
(defrecord Func [f x]
clojure.lang.IFn
(invoke [this arg]
(f x arg))
(applyTo [this args]
(apply f x args)))
((->Func + 7) 1)
=> 8
(sí, sé que acabo de reimplementar una versión inferior de partial
... es solo un ejemplo :-))
¿Es una buena práctica hacer una implementación de registro clojure.lang.IFn
o no?
¿Alguna trampa de este enfoque?