Mercurial > rlm
view 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 source
1 (ns rlm.ns-rlm2 "A few convienence functions for namespaces."3 (:use [clojure.contrib [ns-utils :only [get-ns]]]))5 (defn ns-clear6 "completely removes all aliases, interns, and references from the namespace7 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*)))14 (defn ns-clone-fn15 "the calling namespace (*ns*) gets all the referenced vars as the target namespace16 anything that the target namespace doesn't have, ns won't have. Anything it does17 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)29 (defmacro ns-clone30 ([target-ns-name]31 `(do32 (require '~target-ns-name)33 (ns-clone-fn (get-ns '~target-ns-name)))))35 (defn ls36 "lists all the vars defined in the namespace"37 ([ns] (doall (map println (keys (ns-map ns)))) nil)38 ([] (ls *ns*)))