functional-programming clojure operator-overloading

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.