Mercurial > rlm
comparison 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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:78a630e650d2 |
---|---|
1 (ns rlm.ns-rlm | |
2 "A few convienence functions for namespaces." | |
3 (:use [clojure.contrib [ns-utils :only [get-ns]]])) | |
4 | |
5 (defn ns-clear | |
6 "completely removes all aliases, interns, and references from the namespace | |
7 works on *ns* if called with no arguments" | |
8 ([ns] | |
9 (let [ns (the-ns ns)] | |
10 (doall (map (partial ns-unmap ns) (keys (ns-map ns)))) | |
11 (doall (map (partial ns-unalias ns) (keys (ns-aliases ns)))) nil)) | |
12 ([] (ns-clear *ns*))) | |
13 | |
14 (defn ns-clone-fn | |
15 "the calling namespace (*ns*) gets all the referenced vars as the target namespace | |
16 anything that the target namespace doesn't have, ns won't have. Anything it does | |
17 have, *ns* will have." | |
18 [target-ns] | |
19 (ns-clear *ns*) | |
20 (doall (map (fn [[ns-alias ns]] (alias ns-alias (.name ns))) (ns-aliases target-ns))) | |
21 (doall (map (fn [[sym var]] | |
22 (cond (var? var) | |
23 (. *ns* (refer sym var)) | |
24 (class? var) | |
25 (. *ns* (importClass var)))) | |
26 ;;(eval `(clojure.core/import* ~(.getName var))))) | |
27 (ns-map target-ns))) nil) | |
28 | |
29 (defmacro ns-clone | |
30 ([target-ns-name] | |
31 `(do | |
32 (require '~target-ns-name) | |
33 (ns-clone-fn (get-ns '~target-ns-name))))) | |
34 | |
35 (defn ls | |
36 "lists all the vars defined in the namespace" | |
37 ([ns] (doall (map println (keys (ns-map ns)))) nil) | |
38 ([] (ls *ns*))) | |
39 | |
40 |