Mejor rendimiento en la diseminación del valor var en Clojure.
En Clojure, no es posible utilizar formas de Case con Vars:
(case (resolve 'inc) 'inc 1)
Error de ejecución (IllegalArgumentException) en user/eval2061 (REPL:1).
No hay ninguna cláusula coincidente: 'clojure.core/inc
Pero podría usar un hash-map o una forma (condp = ...)
en su lugar para una solución legible.
¿Cuáles son algunos enfoques buenos para realizar despacho en valores de objetos Var en Clojure considerando únicamente el rendimiento bruto?
davy.ai
Si consideramos solo el rendimiento en bruto, el uso de un hash-map o de una forma
condp
puede no ser la mejor opción, ya que implican procesamiento adicional y posiblemente búsquedas más lentas. En cambio, el uso de una implementación declojure.lang.IFn
para el despacho de objetos Var puede ofrecer un mejor rendimiento. Esto se puede lograr implementando un protocolo con un método que tome un objeto Var y devuelva una función. La función devuelta se puede invocar para realizar el despacho deseado. Otra opción es usar una formareify
para crear una implementación anónima declojure.lang.IFn
para el despacho de objetos Var. Este enfoque también puede proporcionar un buen rendimiento al tiempo que mantiene el código conciso y fácil de leer.