2010-12-12 51 views

Répondre

26

Il s'agit d'une solution de contournement nécessaire pour l'interopérabilité Java.

Lorsqu'un espace de noms Clojure est AOT (à l'avance) compilé dans un fichier .class Java, il doit avoir un nom qui soit un identificateur Java valide. Les tirets ne sont pas valides dans les noms de classes Java, donc Clojure les convertit en caractères de soulignement. Il convertit également des caractères comme * en mots comme _STAR_.

+0

est-ce différent c'est pas AOT? – Chris

+0

La compilation de Clojure est toujours la même. AOT-compilation suffit d'écrire les fichiers de classe sur le disque. –

3

Voulez-vous dire que les fichiers .class sur le disque ont des traits de soulignement où les fonctions de Clojure ont des tirets? Je suis sûr que j'ai lu que c'est quelque chose à voir avec la JVM qui ne supporte pas les tirets dans ces noms de fichiers. (Ou du moins ce n'est pas une garantie qu'il les supporte.)

Ceci est seulement une limitation des noms de fichiers de classe, et Clojure traite silencieusement ce problème de toute façon. Votre propre code peut toujours gérer les fichiers avec des tirets dans le nom de fichier.

Je suis désolée de ne pas avoir de référence pour le moment.

+0

J'ai essayé de placer des tirets dans les fichiers clj mais mes programmes clojure ne peuvent pas lire les fichiers à moins de changer les tirets en underscores – Zubair

+0

Oui, cela est dû aux limitations de la JVM. Voir http://clojure.org/libs "Les traits d'union dans le nom de la librairie sont remplacés par des traits de soulignement dans le chemin" –

+0

Que signifie la réponse quand elle dit "Votre propre code peut toujours gérer les fichiers avec des tirets dans le nom de fichier". S'agit-il de fichiers .clj ou de fichiers .class? – Zubair