Пространства имен - это соответствие между простыми (неуточненными) знаками и переменными/классами.Переменные могут быть добавлены в пространство имен с помощью def, а также с помощью любого из вариантов функции def. В этом случае у переменной появится некоторый знак в качестве имени, а также ссылка на пространство имен, в которое добавится соответствие между этим знаком и переменной.Также пространство имен может заимствовать пары знак-переменная из других пространств имен с помощью refer, use или пары знак-класс с помощью import. Заметим, что пространства имен являются объектами первого класса. Они могут динамически создаваться, удаляться и модифицироваться во время исполнения и в REPL.
Лучший способ создать новое пространство имен в начале файла Clojure - использовать макрос ns. По-умолчанию он создаст новое пространство имен, содержащее пары-соответствия для имен классов из java.lang, clojure.lang.Compiler
а также функций clojure.core
.
В REPL лучше всего использовать in-ns, которая для нового пространства имен добавляет только соответствия для имен классов из java.lang. Чтобы получить доступ к именам из пространства имен clojure.core
, вам нужно будет выполнить (clojure.core/refer 'clojure.core). Для пространства имен user
в REPL это уже сделано за вас.
Текущее пространство имен *ns* может и должно устанавливаться только с помощью in-ns или макроса ns. В обоих случаях пространство имен будет создано, если таковое не существует.
Создание и переключение в пространство имен: in-ns ns create-ns
Добавление в пространство имен: alias def import intern refer
Проверка, что пространство имен существует: all-ns find-ns
Просмотр пространства имен: ns-name ns-aliases ns-imports ns-interns ns-map ns-publics ns-refers
Получение переменных/классов, соответсвующих знаку в пространстве имен: resolve ns-resolve namespace
Удаление соответствий: ns-unalias ns-unmap remove-ns