bien, con la ayuda de este tipo, Michael Kohl, descubrí cómo cambiar a un espacio de nombres que tuvo lugar en una variable (read here for more details)
es así, aquí vamos:
user=> (def working-namespace (create-ns 'my-namespace))
#'user/working-namespace
user=> (in-ns (symbol (str working-namespace)))
#<Namespace my-namespace>
my-namespace=>
;; notice how it switched to "my-namespace"
;; now if i were to put some other namespace in that variable...
my-namespace=> (ns user)
nil
user=> (def working-namespace (create-ns 'other-namespace))
#'user/working-namespace
;; and switch again, i would get the new namespace
user=> (in-ns (symbol (str working-namespace)))
#<Namespace other-namespace>
other-namespace=> ; tadaa!
aunque no creo que es clojure idiomática para volver a asignar las variables, se podría construir esto en una función que recibe el soporte de espacio de nombres var como parámetro
ahora para obtener el valor de una var dentro y fuera de ese espacio de nombres
user=> (intern working-namespace 'some-var "my value")
#'other-namespace/some-var
user=> (var-get (intern working-namespace 'some-var))
"my value"
Pero algo a lo largo de la línea (defmacro defns-name [name]' (def ~ name (ns-name * ns *))) y luego call (defns-name namespace-name) funcionaría. –
Markdown comió las estrellas alrededor de 'ns' en Nicolas comentario anterior: debería leer:' (defmacro defns-name [nombre] \ '(def ~ nombre (ns-name * ns *)))'. –