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

早过忘川 提交于 2019-12-05 05:15:19

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.

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) #"\."))

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.

You can try this

(apply str (drop-last 2 (str `_)))
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!