我在一个JavaScript库(PRNG)周围写了一些包装器宏。 然后我想通过这个宏交叉平台提供功能。 (即我希望为JVM实现此宏的不同实现。)
在Clojure中这样做的正确方法是什么?
或者我可以只有一个宏在编译时检测它是否用于JVM或JS并返回相应的代码?
答案 0 :(得分:2)
请注意,在ClojureScript中,宏是用Clojure编写的(就像在Clojure中一样)。 [不考虑自托管ClojureScript的皱纹。]因此,无论如何,读者条件只会在宏代码中使用:clj
分支。
这是一个持续讨论的主题。相关的主题和门票在这里:
一个选项是简单地编写两个版本的宏,一个用于Clojure,一个用于ClojureScript。另一种方法是使用环境的一些技巧来确定您在上下文中调用宏的平台。有几种方法可以做到这一点。一个例子:
(def ^:private ^:no-doc cljs? (boolean (find-ns 'cljs.analyzer)))