2010-08-24 12 views
10

Es solo una pregunta estúpida que tuve esta mañana: ¿Podemos usar las clases de Scala de clojure?Clases de Scala en clojure

Porque si la respuesta es sí, definitivamente voy a aprender Clojure ^^

+1

¿Por qué la etiqueta scala-2.8? ¿Hay algo específico para esa versión? –

Respuesta

17

clases Scala son las clases de Java y se puede utilizar clases de Java de Clojure hacerlo cómodamente.

Diviértete aprendiendo Clojure. :-)

+1

Y las clases Cloujre (creadas usando 'gen-class' y' deftype/defrecord') también se pueden usar desde Scala. Es todo bytecode debajo. –

+0

El problema es que los métodos de Scala tienen nombres feos y detallados en Java ("+" se convierte en $ más ...), ¿es lo mismo con Clojure? – Aymen

+2

Lamentablemente, sí. Al igual que 'blank?' Se convierte en 'blank_QMARK'. Eso es porque Java (¿o JVM?) No admite dichos caracteres en los identificadores. –

10

Clases de Scala, sí. Objetos singleton de Scala, con la misma firma de año desde Java. Rasla rasgos, no. Scala implicita, ja, bromeas!

Por lo tanto, la experiencia puede variar desde "ok", si solo son sus clases, hasta muy desagradable, en el caso de las colecciones de Scala, por ejemplo.

+4

No sé sobre implicits, pero los rasgos son interfaces, posiblemente junto con las clases de ayuda. Daniel Spiewak tiene [un bonito artículo] (http://www.codecommit.com/blog/java/interop-between-java-and-scala) en la interoperabilidad de Scala/Java, que incluye una sección sobre el uso de rasgos de Java; a juzgar por eso, se vuelve tedioso para los rasgos que no son "puros abstractos", pero en Clojure gran parte de ese tedio, tal vez casi todo, podría abstraerse con macros. –

2

vale la pena decir que las clases Scala que toman los parámetros de función, tales como:

Option.map(f : A => B) 

son poco probable que sea muy útil de Clojure, porque el compilador Clojure no se enciende lambdas Clojure en casos de scala.FunctionN. Estoy con Daniel, creo que la interoperabilidad será pobre.

+2

Estoy bastante seguro de que podría usar macros para resolver el problema de usabilidad. Básicamente, obtenga la macro para envolver el Clojure lambda en una scala.functionN? – mikera

Cuestiones relacionadas