Что не так с пространством имен одного сегмента?
В нескольких местах я прочитал, что пространства имен с одним сегментом обескуражены в clojure.
Действительно, почти каждая библиотека, которую я видел, требует (требуется lib.core) вместо (require 'lib).
Почему?
Изменить: Я немного глуп. Дополнительный кредит будет предоставлен для краткого примера того, как пространство имен одного сегмента может быть плохой.
Ответы
Ответ 1
Java препятствует использованию пакета по умолчанию, потому что вы не можете ссылаться на что-либо в нем из любого другого пакета. Если вы предварительно скомпилируете односегментное пространство имен Clojure, вы получите класс Java в пакете по умолчанию. Если кто-либо в любое время захочет использовать вашу библиотеку с Java, он будет остановлен этой тривиальностью. Поскольку нет веских оснований для использования односегментного пространства имен, и есть эта четко определенная причина, не следует, справедливо сказать, что односегментные пространства имен должны быть обескураженной практикой в Clojure.
Ответ 2
Пространства имен с одним сегментом имеют проблемы с взаимодействием Java. Некоторые вещи могут ломаться неожиданными способами. См. Также https://groups.google.com/forum/?fromgroups=#!topic/clojure/gOffhotk25Y