clojure.core/require¶
Loads libs, skipping any that are already loaded. Each argument is either a libspec that identifies a lib, a prefix list that identifies multiple libs whose names share a common prefix, or a flag that modifies how all the identified libs are loaded. Use :require in the ns macro in preference to calling this directly.
Libs
A 'lib' is a named set of resources in classpath whose contents define a library of Clojure code. Lib names are symbols and each lib is associated with a Clojure namespace and a Java package that share its name. A lib's name also locates its root directory within classpath using Java's package name to classpath-relative path mapping. All resources in a lib should be contained in the directory structure under its root directory. All definitions a lib makes should be in its associated namespace.
'require loads a lib by loading its root resource. The root resource path
is derived from the lib name in the following manner:
Consider a lib named by the symbol 'x.y.z; it has the root directory
Libspecs
A libspec is a lib name or a vector containing a lib name followed by options expressed as sequential keywords and arguments.
Recognized options: :as takes a symbol as its argument and makes that symbol an alias to the lib's namespace in the current namespace. :as-alias takes a symbol as its argument and aliases like :as, however the lib will not be loaded. If the lib has not been loaded, a new empty namespace will be created (as with create-ns). :refer takes a list of symbols to refer from the namespace or the :all keyword to bring in all public vars.
Prefix Lists
It's common for Clojure code to depend on several libs whose names have the same prefix. When specifying libs, prefix lists can be used to reduce repetition. A prefix list contains the shared prefix followed by libspecs with the shared prefix removed from the lib names. After removing the prefix, the names that remain must not contain any periods.
Flags
A flag is a keyword. Recognized flags: :reload, :reload-all, :verbose :reload forces loading of all the identified libs even if they are already loaded (has no effect on libspecs using :as-alias) :reload-all implies :reload and also forces loading of all libs that the identified libs directly or indirectly load via require or use (has no effect on libspecs using :as-alias) :verbose triggers printing information about each load, alias, and refer
Example:
The following would load the libraries clojure.zip and clojure.set abbreviated as 's'.
(require '(clojure zip [set :as s]))
Examples¶
Note by gstamp¶
Good description of use/require/import here:
http://blog.8thlight.com/articles/2010/12/6/clojure-libs-and-namespaces-require-use-import-and-ns
See also¶
- clojure.core/remove-ns (0)
- clojure.core/import (2)
- clojure.core/use (1)
- clojure.core/ns (3)
- clojure.core/refer (1)
- clojure.core/requiring-resolve (0)
- clojure.core/resolve (4)
Content from the matching ClojureDocs page, with authors credited on each contribution.