9

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

4

4 回答 4

13

命名空间在 ClojureScript 中不是一流的,就像在 Clojure 中一样。绝对没有办法在运行时获取命名空间。如果您不害怕访问某些 ClojureScript 编译器内部,则可以在宏扩展时获取此信息。可能应该有一个 API ——但我们还没有。

于 2013-05-21T12:46:59.580 回答
12

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

(namespace ::x)

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

(reduce (fn [ns n] (aget ns n))
        js/window
        (clojure.string/split (namespace ::x) #"\."))
于 2013-10-08T01:20:26.953 回答
8

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

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

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

于 2017-02-19T06:23:02.140 回答
1

你可以试试这个

(apply str (drop-last 2 (str `_)))
于 2016-04-14T19:14:24.603 回答