命名空間是從簡單(非限定)符號到 Vars 和/或 Classes 的對應。Vars 可以使用 def 或其任何變體,在命名空間中內部化,這種情況下,它們有一個簡單的符號作為名稱,以及對其包含命名空間的引用,而命名空間將該符號對應到同一個 var。命名空間也可以使用 refer 或 use 包含從符號到在其他命名空間中內部化的 var 的對應,或使用 import 包含從符號到 Class 物件的對應。請注意,命名空間是一等公民,它們可以被列舉等。命名空間也是動態的,它們可以在執行階段、Repl 等處建立、移除和修改。
在 Clojure 原始檔頂端設定新命名空間的最佳方式是使用 ns 巨集。預設情況下,這將建立一個新的命名空間,其中包含 java.lang 中類別名稱的對應,以及 clojure.core
中函式的對應。
在 Repl 中,最好使用 in-ns,這種情況下,新的命名空間將只包含 java.lang 中類別名稱的對應。為了存取 clojure.core
命名空間中的名稱,您必須執行 (clojure.core/refer 'clojure.core)。Repl 中的 user
命名空間已經執行此操作。
建立命名空間並切換到命名空間: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