annotate src/rlm/ns_rlm.clj @ 1:8565803376a4

upgrading source to work with clojure 1.4
author Robert McIntyre <rlm@mit.edu>
date Tue, 28 Feb 2012 13:26:34 -0600
parents 78a630e650d2
children
rev   line source
rlm@0 1 (ns rlm.ns-rlm
rlm@1 2 "A few convienence functions for namespaces.")
rlm@0 3
rlm@0 4 (defn ns-clear
rlm@0 5 "completely removes all aliases, interns, and references from the namespace
rlm@0 6 works on *ns* if called with no arguments"
rlm@0 7 ([ns]
rlm@0 8 (let [ns (the-ns ns)]
rlm@0 9 (doall (map (partial ns-unmap ns) (keys (ns-map ns))))
rlm@0 10 (doall (map (partial ns-unalias ns) (keys (ns-aliases ns)))) nil))
rlm@0 11 ([] (ns-clear *ns*)))
rlm@0 12
rlm@0 13 (defn ns-clone-fn
rlm@1 14 "the calling namespace (*ns*) gets all the referenced vars as the
rlm@1 15 target namespace anything that the target namespace doesn't have,
rlm@1 16 ns won't have. Anything it does have, *ns* will have."
rlm@0 17 [target-ns]
rlm@0 18 (ns-clear *ns*)
rlm@1 19 (doall (map (fn [[ns-alias ns]]
rlm@1 20 (alias ns-alias (.name ns))) (ns-aliases target-ns)))
rlm@0 21 (doall (map (fn [[sym var]]
rlm@0 22 (cond (var? var)
rlm@0 23 (. *ns* (refer sym var))
rlm@0 24 (class? var)
rlm@0 25 (. *ns* (importClass var))))
rlm@0 26 ;;(eval `(clojure.core/import* ~(.getName var)))))
rlm@0 27 (ns-map target-ns))) nil)
rlm@0 28
rlm@1 29 ;; (defmacro ns-clone
rlm@1 30 ;; ([target-ns-name]
rlm@1 31 ;; `(do
rlm@1 32 ;; (require '~target-ns-name)
rlm@1 33 ;; (ns-clone-fn (get-ns '~target-ns-name)))))
rlm@0 34
rlm@0 35 (defn ls
rlm@0 36 "lists all the vars defined in the namespace"
rlm@1 37 ([ns] (doall (map println (keys (ns-interns ns)))) nil)
rlm@0 38 ([] (ls *ns*)))
rlm@0 39
rlm@0 40