Почему clojure преобразует черты в именах в подчеркивания в файловой системе?

Я использую clojure уже пару месяцев, и одну вещь, которую я действительно не понимаю, это то, почему черты в именах пространств имен должны быть представлены как подчеркивание в файловой системе. Может кто-нибудь объяснить мне это, и возможно ли иметь возможность использовать тире в именах файлов?

2 ответа

Решение

Это необходимый обходной путь взаимодействия Java.

Когда пространство имен Clojure AOT (заранее) скомпилировано в файл Java.class, оно должно иметь имя, которое является допустимым идентификатором Java. Черточки недопустимы в именах классов Java, поэтому Clojure преобразует их в подчеркивания. Он также преобразует символы, такие как * в такие слова, как _STAR_,

Вы имеете в виду, что .class файлы на диске имеют подчеркивание, где функции в Clojure были тире? Я уверен, что прочитал, что это связано с тем, что JVM не поддерживает тире в этих именах файлов. (Или, по крайней мере, это не является гарантией того, что он их поддерживает.)

Это только ограничение имен файлов классов, и Clojure в любом случае молча решает эту проблему. Ваш собственный код все еще может обрабатывать файлы с тире в имени файла.

Мне жаль, что у меня нет ссылки на это прямо сейчас.

Другие вопросы по тегам