ok, avec l'aide de ce gars-là, Michael Kohl, je l'ai trouvé comment passer à un espace de noms tenu dans une variable (read here for more details)
donc, on y va:
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!
bien que je ne pense pas qu'il est idiomatiques clojure de réattribuer les variables, vous pourriez construire cela en une fonction qui obtient le support var pour namespace en tant que paramètre
maintenant pour obtenir la valeur d'un var intérieur et à l'extérieur que l'espace de noms
user=> (intern working-namespace 'some-var "my value")
#'other-namespace/some-var
user=> (var-get (intern working-namespace 'some-var))
"my value"
Mais quelque chose le long de la ligne (defmacro defns-name [nom] '(def ~ name (ns-name * ns *))), puis call (nom-espace-noms-defns) fonctionnerait. –
Markdown a mangé les étoiles autour de 'ns' dans le commentaire de Nicolas ci-dessus: devrait se lire:' (defmacro defns-name [nom] \ '(def ~ nom (ns-name * ns *)))'. –