yazz.com
yazz.com

Reputation: 58826

How can I get the Clojurescript namespace I am in from within a clojurescript program?

How can I get the Clojurescript namespace I am in from within a clojurescript program? I want to do this do provide certain debug information (it only needs to work in dev mode)

Upvotes: 11

Views: 2638

Answers (4)

Martin Klepsch
Martin Klepsch

Reputation: 1915

During macro-expansion you can access &env and retrieve namespace information from the :ns key like this:

(:ns &env)
(:name (:ns &env))

This only works at macro-expansion/compile time and not at runtime.

Upvotes: 8

sbondaryev
sbondaryev

Reputation: 839

You can try this

(apply str (drop-last 2 (str `_)))

Upvotes: 1

pangloss
pangloss

Reputation: 131

You can get the name of the current namespace with this trick, which takes advantage of :: creating a namespaced symbol for you in the current namespace:

(namespace ::x)

You probably don't want to use that value for anything, because if the code is compiled the internal representation will change. If you want to live dangerously, then in the browser you can then access the js object that holds the namespace like this:

(reduce (fn [ns n] (aget ns n))
        js/window
        (clojure.string/split (namespace ::x) #"\."))

Upvotes: 13

dnolen
dnolen

Reputation: 18556

Namespaces are not first class in ClojureScript as they are in Clojure. There's absolutely no way to get the namespace at runtime. It is possible to get this information at macroexpansion time if you're not afraid of accessing some the ClojureScript compiler internals. There should probably be an API for this - but we're not there yet.

Upvotes: 13

Related Questions