Хорошо, с помощью этого парня, Майкла Коля, я узнал, как переключиться на пространство имен, содержащееся в переменной (, читайте здесь для получения более подробной информации )
, так что здесьмы идем:
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!
, хотя я не думаю, что переназначение переменных - это идиоматическое замыкание, вы можете встроить это в функцию, которая теперь получает держатель var для пространства имен как параметр
, чтобыполучить значение переменной var и вне этого пространства имен
user=> (intern working-namespace 'some-var "my value")
#'other-namespace/some-var
user=> (var-get (intern working-namespace 'some-var))
"my value"