ns

ns用来定义当前的命名空间,可以配合import,require,use进行使用。

        (ns foo.bar
          (:refer-clojure :exclude [ancestors printf])
          (:require [clojure.contrib sql sql.tests])
          (:use [my.lib this that])
          (:import [java.util Date Timer Random]
            (java.sql Connection Statement)))

require

require 是将clojure load进入当前的命名空间,会跳过已经load进来的lib。 :require可以配合 :as, :only, :include, :exclude, :refer, :all等等一起使用。

    ;; alias clojure.java.io as iouser=> (require '[clojure.java.io :as io])nil
    
    user=> (io/file "Filename")#<File Filename>
    
    ;; alias clojure.java.io as io using prefixesuser=> (require '(clojure.java [io :as io2])nil
    
    user=> (io2/file "Filename")#<File Filename>

use

use与require作用类似,但除了将libs load进入之外,还使用clojure.core/refer refer他们的namespaces。可以配合:exclude, :only, and :rename使用。

    (ns some.namespace
      (:require [clojure.contrib.json :as json])
      (:use [clojure.string :only [trim lower-case split]]
            [clojure.contrib.shell-out]
            [clojure.pprint]
            [clojure.test]))

import

import主要用来加载java类。

    (import & import-symbols-or-lists)
    import-list => (package-symbol class-name-symbols*)
    (ns foo.bar
      (:import (java.util Date
                          Calendar)
               (java.util.logging Logger
                                  Level)))