2010-12-12 4 views

Respuesta

26

Es una solución necesaria para la interoperabilidad de Java.

Cuando un espacio de nombre Clojure es AOT (anticipado) compilado en un archivo Java .class, debe tener un nombre que sea un identificador Java válido. Los guiones no son válidos en los nombres de clase de Java, por lo que Clojure los convierte en guiones bajos. También convierte caracteres como * en palabras como _STAR_.

+0

¿es diferente si no es AOT? – Chris

+0

No. La compilación de Clojure es siempre la misma. AOT-compilation simplemente escribe los archivos de clase en el disco. –

3

¿Quiere decir que los archivos .class del disco tienen guiones bajos donde las funciones en Clojure tenían guiones? Estoy seguro de que he leído que tiene algo que ver con que la JVM no admite guiones en esos nombres de archivo. (O al menos no es una garantía de que sea compatible).

Esto es solo una limitación de los nombres de los archivos de clase, y Clojure aborda de forma silenciosa este problema de todos modos. Su propio código aún puede manejar archivos con guiones en el nombre del archivo.

Disculpa que no tengo una referencia para esto ahora.

+0

Intenté poner guiones en los archivos clj, pero mis programas clojure no pueden leer los archivos a menos que cambie los guiones para subrayar – Zubair

+0

Sí, esto se debe a las limitaciones de JVM. Consulte http://clojure.org/libs "Los guiones en el nombre de lib se reemplazan por guiones bajos en la ruta" –

+0

¿Qué significa la respuesta cuando dice "Su propio código aún puede manejar archivos con guiones en el nombre de archivo". ¿Esto se refiere a archivos .clj o archivos .class? – Zubair

Cuestiones relacionadas