名前空間は単純な(未装飾の)シンボルからVar、クラスへのマッピングを定義する。Varは def やその派生を使って名前空間にインターンすることができる。その場合Varは単純な名前としてのシンボルとそれを含む名前空間の参照及び同じvarを示す名前空間マップを持つ。名前空間は refer や use を使用して他の名前空間にインターンされたVarに対するマッピングを含むことや、 import を使用してクラスオブジェクトのシンボルに対するマッピングを含むことができる。名前空間はファーストクラスなので列挙すること等ができる。加えて名前空間は動的なのでランタイムにRepl等で作成、変更、削除を行うことができる。
Clojureのソースファイルの一番始めに名前空間を定義する最良の方法は
ns
マクロ を使用することだ。これはデフォルトでは java.lang と clojure.lang.Compiler
のクラス名および
clojure.core
内の関数へのマッピングを含む名前空間を新たに作成する。
Replからは
in-ns
を使用するのがベストで、新しく作られた名前空間には java.lang のクラス名のマッピングのみが含まれる。 clojure.core
の名前空間にある名前アクセスするには (clojure.core/refer 'clojure.core) を実行する必要がある。Replにおける
user
名前空間ではすでにこれが実行されている。
Creating and switching to a namespace:
in-ns
ns
create-ns
Adding to a namespace:
alias
def
import
intern
refer
Finding what namespaces exist:
all-ns
find-ns
Examining a namespace:
ns-name
ns-aliases
ns-imports
ns-interns
ns-map
ns-publics
ns-refers
Getting a namespace from a symbol:
resolve
ns-resolve
namespace
Removing things:
ns-unalias
ns-unmap
remove-ns