J'utilise clojure depuis quelques mois maintenant et une chose que je ne comprends vraiment pas, c'est pourquoi les tirets dans les noms d'espaces de noms doivent être représentés comme des traits de soulignement dans le système de fichiers. Quelqu'un peut-il m'expliquer cela, et est-il possible d'utiliser des tirets dans les noms de fichiers aussi?Pourquoi clojure convertit-il les tirets dans les noms en caractères de soulignement dans le système de fichiers?
Répondre
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_
.
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.
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
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" –
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
est-ce différent c'est pas AOT? – Chris
La compilation de Clojure est toujours la même. AOT-compilation suffit d'écrire les fichiers de classe sur le disque. –