2012-08-13 26 views
13

Estoy familiarizado con el hecho de que las clases/objetos scala se pueden invocar desde clojure, como scala compila a bytecode, y clojure se siente cómodo con él.clojure y scala interop

Sin embargo, ¿es tan fácil invocar funciones de clojure e importar espacios de nombres desde scala?

Me gustaría mezclar el excelente marco de elevación y clojure, básicamente, llamar al código clojure del ascensor.

+0

Sé que la gente ha escrito puentes para JRuby-Clojure y JRuby-Scala, me sorprendería mucho si alguien no hubiera hecho Clojure-Scala. –

Respuesta

12

La semántica para las importaciones en Scala es básicamente la misma que Java. Debería poder obtener la información que necesita leyendo sobre cómo invocar el código de Clojure desde Java, luego aplique los mismos principios en Scala.

Si desea compilar el código Clojure e incluirlo como un archivo JAR en la ruta de clase entonces este puesto debe ser relevante:

Calling Clojure from Java

Si prefiere compilar dinámicamente/interpretar los archivos .clj entonces usted debe leer esto:

Clojure Programming: Invoking Clojure from Java

La primera opción parece mucho más agradable para mí.

+2

+1, aunque creo que la segunda opción realmente vale la pena considerarla. Es la opción más "dinámica", que es útil si está utilizando Clojure como un tipo de lenguaje de scripting incorporado. Y evita la necesidad de precompilar las clases de Clojure. – mikera

+0

Hay un pequeño problema con el uso de 'var' en Scala: es necesario poner" backticks "a su alrededor. Necesité la interoperabilidad hace un tiempo e hice esta envoltura: https://gist.github.com/HairyFotr/4995607 – HairyFotr

0

FWIW, tuve una experiencia similar recientemente. No siempre es fácil consumir bibliotecas scala en una base de código de clojure. Si los autores de la biblioteca no han tenido en cuenta a los consumidores scala mientras diseñan la API, la integración puede ser trivial. Si no es así, es posible que tenga que aprender los detalles de qué interfaz Java está producida por la biblioteca scala que está intentando consumir.

Recientemente escribí una documentación sobre este tema exacto (https://github.com/grandbora/clojure-scala-cantrips#clojure-scala-cantrips) y hay algunas bibliotecas de clojure que ofrecen sintaxis para el consumo de bibliotecas scala.