Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Это необходимое обходное решение для взаимодействия Java.

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

Ответ 2

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

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

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