是否有一个用于clojure和clojurescript的宏,它允许你根据文件是用clojure还是clojurescript编译来插入不同的表达式?
(if-clojurescript
(my clojurescript definition)
(my clojure definition))
基本上我正在寻找类似#ifdef SOME_PLATFORM宏的东西,你可能会看到围绕c ++代码。我认为这对于我希望成为交叉的一部分的文件很有用,但是该文件的一小部分在clojure / clojure-script之间不兼容。
答案 0 :(得分:3)
您可以查看*clojure-version*
user> (if *clojure-version* "I'm Clojure" "I'm ClojureScript")
"I'm Clojure"
cljs.user> (if *clojure-version* "I'm Clojure" "I'm ClojureScript")
"I'm ClojureScript"
如果您无法将语言中性位拆分为自己的文件(这是首选),这可能很有用。我的个人意见倾向于避免使用太多这样的东西。
(defmacro if-clojurescript [clj-form cljs-form]
(if *clojure-version* clj-form cljs-form))
答案 1 :(得分:3)
不是真正的宏,而是一个Leiningen插件,它根据源中放置的元数据注释生成Clojure或ClojureScript代码:cljx
答案 2 :(得分:3)
这是Clojure 1.7的新功能:Reader conditionals。
另见Daniel Compton blog,例如:
#?(:clj (Clojure expression)
:cljs (ClojureScript expression)
:clr (Clojure CLR expression))
您可能还想查看macrovitch。
答案 3 :(得分:2)
有一些名为Feature Expressions的失效工作用于实现在同一代码库中支持Clojure的不同变体的一般机制。