Clojure libraries and dependencies
The Clojure language provides some keywords to handle libraries in each file:
:require
loads a Clojure library so it can be used in the current file or in the REPL:use
brings definitions to current namespace via aliases:import
gives access to native Java classes and interfaces
Note: in ClojureScript the native JavaScript code can be usually accessed using
:require
, but sometimes :import
is needed (eg. for Google Closure library).
How to use these keywords
Load foo.bar
and invoke a function from that library with the
full namespace:
ns user
(:require
(
[foo.bar]
[foo.baz]))
(foo.bar/a-function)
Load a library making an alias to simplify access to a function:
ns user
(:require
(:as bar]
[foo.bar :as baz]))
[foo.baz
(bar/a-function)
Load with :refer
only the definitions we are interested in:
ns user
(:require
(:refer [a-function]]))
[foo.bar
(a-function)
Load with :refer
only some definitions and also make aliases with :rename
for our convenience:
ns user
(:require
(:refer [a-function]
[foo.bar :rename [a-function func]]))
(func)
The :use
keyword can be applied with :only
to indicate which definitions
will be provided:
ns user
(:use
(:only [a-function]]))
[foo.bar
(a-function)
The :use
keyword can also be applied without :only
, but beware! It can cause
conflicts, eg. the following snippet will have a problem if foo.bar
and
foo.baz
namespaces provide definitions with the same name:
ns user
(:use
(;; avoid :use without :only, it can cause conflicts!
[foo.bar]
[foo.baz]))
(a-function)
Import a native Java class of java.util
package and invoke the Date.
method:
ns user
(:import
(
(java.util Date)))
; call a Java method to get the current date (Date.)