Skip to content

Instantly share code, notes, and snippets.

Created March 18, 2013 09:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save anonymous/5186097 to your computer and use it in GitHub Desktop.
Save anonymous/5186097 to your computer and use it in GitHub Desktop.
Codigo de la entrada en el blog javierneirasanchez.blogspot.com
;; Se define en un modulo una funcion polimorfica en funcion del tipo de los *dos argumentos*
;; La funcion puede ser polimorfica en funcion de cualquier combinacion de cualquiera
;; de los valores (no solo su tipo) de sus parametros
(ns modulo1)
(defmulti write (fn [writer data] [(type writer) (:type data)])
;; En otro modulo que importa la definicion anterior generica de write
(ns modulo2)
(defmethod modulo1/writer [java.io.FileWriter :user] [writer user]
(comment codigo especifico usando el FileWriter y teniendo en cuenta
que los datos son del tipo usuario))
(defmethod modulo1/writer [java.io.FileWriter :generic] [w u]
(comment codigo que escibe los datos de una entidad generica))
(defmethod [java.io.FileWriter :session] [writer session]
(comment mas codigo))
;; En otro modulo o en el mismo
(defmethod modulo1/writer [SQLWriter :user] [w u]
(codigo que escibe los datos del usuario en la db))
;; Se puede indicar cual es el metodo que se usa por defecto si no hay uno
;; definido para unos valores particulares y cual es el preferido si existen
;; dos definiciones de metodos que chocan
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment