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

Zub*_*air 7 clojurescript

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

dno*_*len 9

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


小智 9

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

(namespace ::x)
Run Code Online (Sandbox Code Playgroud)

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

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

  • @Zubair 刚刚检查过,它确实适用于高级编译。 (2认同)

Mar*_*sch 5

在宏扩展期间,您可以像这样&env:ns键访问和检索名称空间信息:

(:ns &env)
(:name (:ns &env))
Run Code Online (Sandbox Code Playgroud)

这仅在宏扩展/编译时有效,而在运行时无效。