2024 State of Clojure 问卷调查! 中分享您的想法。

欢迎!请在 关于 页面上获取更多有关此功能的信息。

+1 投票
ClojureScript

我在编写旨在针对 Java 和 JS 的库,并且在测试中遇到了问题。理想情况下,我希望写一个遵循最低共同标准的测试文件,因为库 API 和行为旨在无差别地定位。

我做了一些辅助函数和宏来测试,但找不到让这些宏解析 async 库以编译为 cljs 的方法。唯一想到的就是使用两次宏,并使用完整的函数名称,但这非常原始,我期望有更好的方法。

1 答案

+1 投票

来自 clara-rules 项目的 technique
https://github.com/cerner/clara-rules/blob/main/src/main/clojure/clara/rules/compiler.clj#L88

(ns my.macro) ;; .clj file

(defn compiling-cljs? []
  (boolean
    (when-let [n (find-ns 'cljs.analyzer)]
      (when-let [v (ns-resolve n '*cljs-file*)]
        @v))))

(defmacro my-macro [& body]
  (if (compiling-cljs?)
    (cljs.async/bla)
    (clojure.async/bla)))

;; in cljc call: (my-macro ...)
谢谢。我最终使用了宏并在 (some? (:ns &env)) 处检查 cljs。不确定哪个检查更可靠。
@alexmiller 考虑创建一个特性问题“可以在宏中使用的“读取条件””,因为野外有大量的绕路方法 - 最常见的`(:ns &env)`检查,可能是因为这个帖子: https://groups.google.com/g/clojurescript/c/iBY5HaQda4A;
...