Al haber visto recientemente una presentación de los protocolos de Clojure, quedé bastante impresionado por la manera limpia en que las extensiones a los tipos existentes se pueden hacer de esta manera. Sin embargo, estaba bastante seguro de haber visto una forma similar de hacer esto en otro idioma y después de un tiempo descubrí que era Groovy Categories.Diferencia entre los protocolos de Clojure y las categorías de Groovy
Compare esto:
@Category(String) class StringCategory {
String lower() {
return this.toLowerCase()
}
}
use (StringCategory) {
println("TeSt".lower())
assert "test" == "TeSt".lower()
}
al equivalente Protocolo Clojure (tomado de mikera's answer below and tested in ideone.com)
(defprotocol Lowerable
(lower [x]))
(extend-protocol Lowerable
String
(lower [s]
(.toLowerCase s)))
(println (lower "HELLO"))
mi pregunta es:
- , además de las diferencias de rendimiento (se dice que Clojure está muy optimizado en este sentido) - ¿hay una diferencia semántica entre los dos enfoques? ches?
- Además de la sintaxis torpe, ¿hay algo lógicamente incorrecto con el enfoque de Groovy?
Descargo de responsabilidad: Soy un completo Clojure novato!
Encuentro esta pregunta bastante interesante. ¿Podría agregar el equivalente de Clojure para los que no están iluminados por Clojure, y para las comparaciones de sintaxis/brevedad? : D – epidemian
lo siento, me gustaría, es solo que no puedo. En el sitio http://clojure.org/protocols hay una muestra bastante similar, pero en este momento no puedo probar el código equivalente, por lo tanto, no quiero publicar ningún código que pueda no funcionar. Lamentablemente, no existe una consola web como la consola web de Groovy (hay una en try-clojure.org, pero estoy fracasando al pegar líneas de código separadas en la nueva línea). – Ice09
Tal vez intente con [ideone] (http://ideone.com/)? – epidemian