它实际上并没有调用in-ns——它只在“详细加载”时打印这一行(也就是说,如果你将:verbose作为use的一个选项传递给use),这样你就知道引用的是哪个命名空间发生在。如果您使用 :as 调用 require 以明确将在哪个命名空间中创建别名,它也会这样做:
user=> (require '[clojure.set :as set] :verbose)
(clojure.core/load "/clojure/set")
(clojure.core/in-ns 'user)
(clojure.core/alias 'set 'clojure.set)
当初始加载导致递归加载更多命名空间时,这很有用。例如,这是(require '[clojure.core.rrb-vector :as fv] :verbose) 的输出(可以说refer 行也可以使用解释性in-ns 行处理):
(clojure.core/load "/clojure/core/rrb_vector")
(clojure.core/load "/clojure/core/rrb_vector/protocols")
(clojure.core/refer 'clojure.core.rrb-vector.protocols :refer '[slicev splicev])
(clojure.core/load "/clojure/core/rrb_vector/nodes")
(clojure.core/refer 'clojure.core.rrb-vector.nodes :refer '[ams object-am object-nm primitive-nm empty-pv-node empty-gvec-node])
(clojure.core/load "/clojure/core/rrb_vector/rrbt")
(clojure.core/refer 'clojure.core.rrb-vector.protocols :refer '[PSliceableVector slicev PSpliceableVector splicev])
(clojure.core/refer 'clojure.core.rrb-vector.nodes :refer '[ranges overflow? last-range regular-ranges first-child last-child remove-leftmost-child replace-leftmost-child replace-rightmost-child fold-tail new-path index-of-nil object-am object-nm primitive-nm])
(clojure.core/load "/clojure/core/rrb_vector/transients")
(clojure.core/refer 'clojure.core.rrb-vector.nodes :refer '[ranges last-range])
(clojure.core/refer 'clojure.core.rrb-vector.transients :refer '[transient-helper])
(clojure.core/load "/clojure/core/rrb_vector/fork_join")
(clojure.core/load "/clojure/core/reducers")
(clojure.core/in-ns 'clojure.core.reducers)
(clojure.core/alias 'walk 'clojure.walk)
(clojure.core/in-ns 'clojure.core.rrb-vector.fork-join)
(clojure.core/alias 'r 'clojure.core.reducers)
(clojure.core/in-ns 'clojure.core.rrb-vector.rrbt)
(clojure.core/alias 'fj 'clojure.core.rrb-vector.fork-join)
(clojure.core/refer 'clojure.core.protocols :refer '[IKVReduce])
(clojure.core/in-ns 'clojure.core.rrb-vector.rrbt)
(clojure.core/alias 'r 'clojure.core.reducers)
(clojure.core/refer 'clojure.core.reducers :refer '[CollFold coll-fold])
(clojure.core/refer 'clojure.core.rrb-vector.rrbt :refer '[as-rrbt])
(clojure.core/load "/clojure/core/rrb_vector/interop")
(clojure.core/refer 'clojure.core.rrb-vector.protocols :refer '[PSliceableVector slicev PSpliceableVector splicev])
(clojure.core/refer 'clojure.core.rrb-vector.rrbt :refer '[as-rrbt])
(clojure.core/in-ns 'user)
(clojure.core/alias 'fv 'clojure.core.rrb-vector)
这里是clojure.core/load-lib 来源的相关片段(这是打印输出的来源):
;; as of Clojure 1.6.0
(when (and need-ns *loading-verbosely*)
(printf "(clojure.core/in-ns '%s)\n" (ns-name *ns*)))
(when as
(when *loading-verbosely*
(printf "(clojure.core/alias '%s '%s)\n" as lib))
(alias as lib))
need-ns 是一个本地值,其值为 (or as use) - 也就是说,如果指定了 :as 别名或负载是由 use 引起的,则为真。
如果您想检查整个函数,请在 REPL 中说 (source clojure.core/load-lib)。