2024年Clojure状态调查中分享您的想法!

欢迎!请查看关于页面了解更多关于此平台的信息。

+1 投票
ClojureScript

我正在编写一个面向 Java 和 JS 的库,遇到了测试的问题。理想情况下,我想写一个符合最低共同标准的测试文件,因为库的 API 和行为是为无目标而设计的。

为测试编写了一些辅助函数和宏,但找不到使这些宏可以解析异步库用于编译 cljs 的方法。唯一想到的是使用两次宏并使用完全限定的函数名,但这很原始,我预计应该有更好的方法。

1 个回答

+1 投票

来自 clara-rules 项目的技术
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 ;
...