如何在clojurescript程序中获取我所在的Clojurescript命名空间?

时间:2013-05-20 19:00:56

标签: clojurescript

如何在clojurescript程序中获取我所在的Clojurescript命名空间?我想这样做提供某些调试信息(它只需要在开发模式下工作)

4 个答案:

答案 0 :(得分:9)

您可以使用此技巧获取当前命名空间的名称,这可以利用::在当前命名空间中为您创建命名空间符号:

(namespace ::x)

您可能不希望将该值用于任何事情,因为如果编译代码,内部表示将会更改。如果你想危险地生活,那么在浏览器中你可以访问包含命名空间的js对象,如下所示:

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

答案 1 :(得分:7)

命名空间在ClojureScript中不是第一类,因为它们在Clojure中。绝对没有办法在运行时获取命名空间。如果您不害怕访问某些ClojureScript编译器内部,则可以在宏展开时获取此信息。可能应该有一个API - 但我们还没有。

答案 2 :(得分:5)

在宏扩展期间,您可以访问Html.ActionLink并从&env键检索命名空间信息,如下所示:

:ns

这仅适用于宏扩展/编译时,而不适用于运行时。

答案 3 :(得分:1)

你可以试试这个

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