【问题标题】:How can I get the Clojurescript namespace I am in from within a clojurescript program?如何从 clojurescript 程序中获取我所在的 Clojurescript 命名空间?
【发布时间】:2013-05-20 19:00:56
【问题描述】:

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

【问题讨论】:

    标签: clojurescript


    【解决方案1】:

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

    【讨论】:

    • 谢谢!我担心会是这种情况
    【解决方案2】:

    你可以通过这个技巧获得当前命名空间的名称,它利用::在当前命名空间中为你创建一个命名空间符号:

    (namespace ::x)
    

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

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

    【讨论】:

    • @Zubair 刚刚检查过,它确实适用于高级编译。
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      你可以试试这个

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多