【发布时间】:2013-05-20 19:00:56
【问题描述】:
如何从 clojurescript 程序中获取我所在的 Clojurescript 命名空间?我想这样做确实提供了某些调试信息(它只需要在开发模式下工作)
【问题讨论】:
标签: clojurescript
如何从 clojurescript 程序中获取我所在的 Clojurescript 命名空间?我想这样做确实提供了某些调试信息(它只需要在开发模式下工作)
【问题讨论】:
标签: clojurescript
命名空间在 ClojureScript 中并不是一流的,就像在 Clojure 中一样。绝对没有办法在运行时获取命名空间。如果您不害怕访问某些 ClojureScript 编译器内部,则可以在宏扩展时获取此信息。可能应该有一个 API - 但我们还没有。
【讨论】:
你可以通过这个技巧获得当前命名空间的名称,它利用::在当前命名空间中为你创建一个命名空间符号:
(namespace ::x)
您可能不想将该值用于任何事情,因为如果编译代码,内部表示会发生变化。如果您想危险地生活,那么在浏览器中您可以访问包含命名空间的 js 对象,如下所示:
(reduce (fn [ns n] (aget ns n))
js/window
(clojure.string/split (namespace ::x) #"\."))
【讨论】:
在宏扩展期间,您可以访问 &env 并从 :ns 键检索命名空间信息,如下所示:
(:ns &env)
(:name (:ns &env))
这只在宏扩展/编译时有效,在运行时无效。
【讨论】:
你可以试试这个
(apply str (drop-last 2 (str `_)))
【讨论】: