es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  ,

Answer

  1. Avatar for 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 de clojure.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 forma reify para crear una implementación anónima de clojure.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.

Comments are closed.