ok, z pomocą tego faceta, Michaela Kohla, okazało się, jak przejść do nazw, która odbyła się w zmiennej (read here for more details)
tak, jedziemy:
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!
chociaż nie sądzę, że jest idiomatyczne clojure aby przypisać zmienne, można zbudować to do funkcji, która ją właścicielowi var dla nazw jako parametr
teraz, aby uzyskać wartość var na zewnątrz i wewnątrz tej przestrzeni nazw
user=> (intern working-namespace 'some-var "my value")
#'other-namespace/some-var
user=> (var-get (intern working-namespace 'some-var))
"my value"
Ale coś wzdłuż linii (defmacro defns-name [name] '(def ~ nazwa (ns-nazwa * ns *))), a następnie zadzwonić (defns-nazwa-nazwy-nazwy) będzie działać. –
Markdown zjadł gwiazdki wokół 'ns' w komentarzu Nicolas powyżej: powinien przeczytać:' (defmacro defns-name [name] \ '(def ~ name (ns-name * ns *)))'. –