Пространства имен являются связками между простыми (без указания пространства имен) символами и переменными и/или классами. Var-ы могут быть встроены в пространство имен, используя def
или любой из его вариантов, в этом случае они имеют простой символ для имени и ссылку на содержащее их пространство имен, а пространство имен отображает этот символ на тот же var. Пространство имен также может содержать отображения от символов к var-ам, встроенным в другие пространства имен, используя refer или use, или от символов к объектам Class, используя import. Обратите внимание, что пространства имен являются объектами первого класса, они могут быть перечислены и т.д. Пространства имен также динамичны, их можно создавать, удалять и изменять во время выполнения, в REPL и т.д.
Лучший способ установить новое пространство имен в верхней части исходного файла Clojure - это использовать макрос ns macro. По умолчанию это создаст новое пространство имен, которое будет содержать отображения для имен классов в 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 macro, оба из которых создают пространство имен, если оно не существует.
Связанные функции
Создание и переход в пространство имен: 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