Por lo que yo puedo decir, si quiero definir un protocolo (defprotocol
) que sólo se pondrá en práctica por uno defrecord
, todavía tengo para definir el protocolo primero, y luego definir el defrecord
que lo implementa :Combinando Clojure defprotocol y defrecord
(defprotocol AProtocol
(a-method [this])
(b-method [this that]))
(defrecord ARecord [a-field b-field]
AProtocol
(a-method [this] ...)
(b-method [this that] ...))
¿No hay forma de combinar los dos, quizás con un protocolo "anónimo"?
¿Hay algún motivo por el que no desee utilizar funciones normales? – Jonas
@Jonas: Es posible que desee refactorizar el protocolo a un 'defprotocol' más tarde para que otros registros puedan implementarlo, pero en este momento, no estoy seguro. Creo que siempre puedo cambiar las funciones ordinarias en funciones de protocolo como parte de la refactorización. Tampoco puedo "anular" una función incorporada como 'count' sin implementar un protocolo, o sombrearé el enlace predeterminado. – Ralph
Una función de protocolo llamada 'count' sombreará también el built-in. – amalloy