function clojure functional-programming record

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?