2010-09-10 6 views

Respuesta

2

Comparten el mismo nombre y los conceptos están relacionados, sin embargo, los protocolos Clojure a son más generales y están diseñados para resolver el "problema de expresión". Esto video is very interesting to watch.

Los protocolos de Objective C son más como las interfaces de Java/C# - especifican un conjunto de métodos que una clase concreta puede implementar. Sin embargo, debe proporcionar estos métodos en la clase concreta, lo que generalmente significa que en la práctica usted controla el código fuente de la clase que está ampliando.

protocolos Clojure permiten definir un conjunto de funciones que se extienden para manejar cualquier clase de una forma polimórfica, y que pueden proporcionar las implementaciones por separado, incluso si no se controla la clase está extendiendo.

Un ejemplo de extender un protocolo Clojure a la clase java.lang.String por ejemplo (que definitivamente no controlas!) Y también a la nula valor especial (es decir, un valor nulo):

;; define a protocol with one function 
(defprotocol FooProtocol 
    (foo [this])) 

;; extend the protocol to String and nil 
(extend-protocol FooProtocol 
    java.lang.String 
    (foo [some-string] (str "Called foo on String: " some-string)) 
    nil 
    (foo [_] "Called foo on nil value")) 

(foo "hello") 
=> "Called foo on String: hello" 

(foo nil) 
=> "Called foo on nil value" 
Cuestiones relacionadas