如何从 clojurescript 程序中获取我所在的 Clojurescript 命名空间?我想这样做确实提供了某些调试信息(它只需要在开发模式下工作)
问问题
1878 次
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 回答