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