tutorial online example clojure

online - ¿Integrando Clojure en un proyecto Java existente?



clojure vs scala (3)

Es más fácil tomar una aplicación Java existente y envolverla en Clojure que al revés, porque la interoperabilidad Java de Clojure es muy simple.

Cuando pregunta cómo acceder a Clojure desde Java, la respuesta es que o bien necesita cargar código Clojure o necesita generar archivos de clase Java que se pueden usar desde su proyecto Java. Bootstrapping implica vincular al jarro clojure y acceder a la función de carga para cargar la fuente de clojure. Para generar clases de Java, busque en AOT (consulte el ejemplo en el sitio web).

¿Cómo puedo tomar un gran proyecto Java existente y comenzar a agregar módulos Clojure? Por ejemplo, en el siguiente código, me gustaría que las siguientes funciones estén disponibles en Java: ¿estado ?, ¿zip ?, lista-de-estado, lista-código-postal . Los dos predicados devolverán un valor booleano, pero los "getters" devolverán los arrays.

(def *states* (list "NJ" "NY" "CA")) (def *zipcodes* (list 12345 54343 98765)) (defn member [x sq] (if (seq sq) (if (= x (first sq)) sq (recur x (rest sq))))) (defn state? [aState] (not (= (member aState *states*) nil))) (defn zip? [aZip] (not (= (member aZip *zipcodes*) nil))) (defn state-list [] *states*) (defn zipcode-list [] *zipcodes*) ;; --------------- (state? "AA") (state? "CA") (zip? 11111) (zip? 12345)


Lo compilaría usando leininge n y luego agregaría el archivo jar a mi proyecto java como un dep dep. Aquí hay un gran video sobre el uso de leiningen. entonces lo llamarías directamente de Java. Leiningen tiene una opción uberjar que funciona en clojure y en todas sus dependencias clojure, por lo que solo debe preocuparse por un archivo. Me gusta esto porque es menos trabajo.

Un enfoque más amigable con Java sería agregar una tarea de hormiga para construirlo junto con el proyecto de Java, es solo un poco más de trabajo

para las funciones que necesitan devolver arreglos java adecuados llamar to-array en ellos

a diferencia de muchos de los mejores éxitos de "llamar a clojure desde java", no debería necesitar llamar al tiempo de ejecución de clojure RT.

PD: mi línea favorita de etiquetas "Me gustaría usar una biblioteca java llamada clojure" Le pregunté a Rich que dijo que esto era genial;)


Mi enfoque recomendado es el siguiente:

  • Continúa administrando el proyecto Java con lo que sea que tu herramienta de construcción principal sea (¿supuestamente Maven?)
  • Agrega Clojure como una dependencia. Funcionará como cualquier otro archivo .jar biblioteca
  • Llame al código Clojure de Java. Un caso típico de uso sería require un espacio de nombres para hacer esto, tomar una referencia a cualquier IFn que desee llamar y llamar a la función a través de IFn.invoke

Recomiendo este enfoque porque, en general, es más sencillo agregar Clojure a un proyecto de Java que al revés: esto es especialmente cierto si tiene otros desarrolladores para considerar o está usando herramientas que asumen un proyecto de Java normal. También es menos intimidante para los gerentes: todo lo que estás haciendo es usar una pequeña biblioteca Java adicional :-)

Hice una pequeña biblioteca de utilidades que hace mucho del trabajo requerido para llamar a Clojure desde Java que puede ser útil: