Почему clojure преобразует черты в именах в подчеркивания в файловой системе?
Я использую clojure уже пару месяцев, и одну вещь, которую я действительно не понимаю, это то, почему черты в именах пространств имен должны быть представлены как подчеркивание в файловой системе. Может кто-нибудь объяснить мне это, и возможно ли иметь возможность использовать тире в именах файлов?
2 ответа
Это необходимый обходной путь взаимодействия Java.
Когда пространство имен Clojure AOT (заранее) скомпилировано в файл Java.class, оно должно иметь имя, которое является допустимым идентификатором Java. Черточки недопустимы в именах классов Java, поэтому Clojure преобразует их в подчеркивания. Он также преобразует символы, такие как *
в такие слова, как _STAR_
,
Вы имеете в виду, что .class
файлы на диске имеют подчеркивание, где функции в Clojure были тире? Я уверен, что прочитал, что это связано с тем, что JVM не поддерживает тире в этих именах файлов. (Или, по крайней мере, это не является гарантией того, что он их поддерживает.)
Это только ограничение имен файлов классов, и Clojure в любом случае молча решает эту проблему. Ваш собственный код все еще может обрабатывать файлы с тире в имени файла.
Мне жаль, что у меня нет ссылки на это прямо сейчас.