I normally call
(keys (ns-publics 'foo))
to list Vars exported by the namespace foo
; e.g. for clojure.contrib.monads
this returns
(defmonad censor m-when-not m+write+m maybe-m maybe-t ...)
(the ...
stands for quite a lot more).
More generally, there's a bunch of functions whose names start in ns-
which list Vars by namespace, with certain additional criteria attached:
ns-map
-- the most general function of all, returns a map keyed by symbols (non-namespace-qualified symbols actually), where the value corresponding to each symbol is the Var or class that symbol resolves to in the given namespace.
ns-interns
-- like ns-map
, but includes only the Vars interned in the given namespace (as opposed to Vars from other namespaces which are accessible from the given namespace due to a use
or refer
call or the implicit referral of Vars from clojure.core
.
ns-publics
-- like ns-interns
, but includes only the non-private Vars.
ns-imports
-- like ns-map
, but includes only the entries whose values correspond to Java classes.
There's also ns-aliases
which lists symbols which can be used as shorthand aliases when referring to Vars from other namespaces; e.g. if you call (require '[clojure.contrib.math :as math])
, ns-aliases
will include an entry with the key of math
(the symbol), whose value will be the actual namespace clojure.contrib.math
. These mapping are not included in the map returned by ns-map
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…