Mercurial > rlm
diff src/rlm/ns_rlm.clj @ 0:78a630e650d2
initial import
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Tue, 18 Oct 2011 00:57:08 -0700 |
parents | |
children | 8565803376a4 |
line wrap: on
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/rlm/ns_rlm.clj Tue Oct 18 00:57:08 2011 -0700 1.3 @@ -0,0 +1,40 @@ 1.4 +(ns rlm.ns-rlm 1.5 + "A few convienence functions for namespaces." 1.6 + (:use [clojure.contrib [ns-utils :only [get-ns]]])) 1.7 + 1.8 +(defn ns-clear 1.9 + "completely removes all aliases, interns, and references from the namespace 1.10 + works on *ns* if called with no arguments" 1.11 + ([ns] 1.12 + (let [ns (the-ns ns)] 1.13 + (doall (map (partial ns-unmap ns) (keys (ns-map ns)))) 1.14 + (doall (map (partial ns-unalias ns) (keys (ns-aliases ns)))) nil)) 1.15 + ([] (ns-clear *ns*))) 1.16 + 1.17 +(defn ns-clone-fn 1.18 + "the calling namespace (*ns*) gets all the referenced vars as the target namespace 1.19 + anything that the target namespace doesn't have, ns won't have. Anything it does 1.20 + have, *ns* will have." 1.21 + [target-ns] 1.22 + (ns-clear *ns*) 1.23 + (doall (map (fn [[ns-alias ns]] (alias ns-alias (.name ns))) (ns-aliases target-ns))) 1.24 + (doall (map (fn [[sym var]] 1.25 + (cond (var? var) 1.26 + (. *ns* (refer sym var)) 1.27 + (class? var) 1.28 + (. *ns* (importClass var)))) 1.29 + ;;(eval `(clojure.core/import* ~(.getName var))))) 1.30 + (ns-map target-ns))) nil) 1.31 + 1.32 +(defmacro ns-clone 1.33 + ([target-ns-name] 1.34 + `(do 1.35 + (require '~target-ns-name) 1.36 + (ns-clone-fn (get-ns '~target-ns-name))))) 1.37 + 1.38 +(defn ls 1.39 + "lists all the vars defined in the namespace" 1.40 + ([ns] (doall (map println (keys (ns-map ns)))) nil) 1.41 + ([] (ls *ns*))) 1.42 + 1.43 +