Table of Contents

名前空間は単純な(未装飾の)シンボルからVar、クラスへのマッピングを定義する。Varは def やその派生を使って名前空間にインターンすることができる。その場合Varは単純な名前としてのシンボルとそれを含む名前空間の参照及び同じvarを示す名前空間マップを持つ。名前空間は referuse を使用して他の名前空間にインターンされた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 名前空間ではすでにこれが実行されている。

現在の名前空間、 *ns*in-ns 、もしくは ns マクロ で設定することが出来、またこれらの方法でのみ作られるべきである。どちらも指定された名前空間が存在しない場合、新たにその名前空間を作成する。

関連する関数

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