functional programming - Sobrecarga del operador en Clojure
functional-programming operator-overloading (2)
Incluso mirando detenidamente la documentación sobre Clojure, no veo ninguna confirmación directa de si Clojure soporta o no la sobrecarga del operador.
Si lo hace, ¿podría alguien proporcionarme un recorte rápido de cómo sobrecargar, digamos, el operador "+" para delegar a algún método predefinido que podemos llamar myPlus
?
Soy muy nuevo en Clojure, por lo que la ayuda de alguien aquí sería muy apreciada.
Eche un vistazo a esto: http://clojure.org/multimethods
Ciertas funciones, como + son básicas y no se pueden redefinir.
Podría hacer una nueva función y llamarlo ". +" O "! +", Por ejemplo, que es similar en términos de legibilidad.
Al usar la información en la URL de métodos múltiples incluida anteriormente, puede crear una función que le indique a su. + Qué implementación debe usar.
Los operadores de Clojure (como cualquier Lisp) son funciones simples; Puedes definir un "operador" como una función:
(defn ** [x y] (Math/pow x y))
El operador "+" (y algunos otros operadores matemáticos) es un caso especial en Clojure, ya que está en línea (para el caso binario, al menos). Hasta cierto punto, puedes evitarlo al no hacer referencia a clojure.core
(o excluir clojure.core/+
) en tu espacio de nombres, pero esto puede ser muy delicado.
Para crear un espacio de nombres donde se redefine +:
(ns my-ns
(:refer-clojure :exclude [+]))
(defn + [x y] (println x y))
(+ "look" "ma")
Una buena estrategia probablemente sería hacer de su + un método múltiple y llamar a la función de core + para los casos numéricos.