Pergunta

Is there a macro for Clojure and ClojureScript that would allow you to insert different expressions depending on whether the file is being compiled in Clojure or Clojurescript?

(if-clojurescript
   (my clojurescript definition)
   (my clojure definition))

Essentially I'm looking for something like the #ifdef SOME_PLATFORM macros you might see sprinkled around C/C++ code. I think it could be useful for files that I would like to be part of a cross-over, but for which one small part of that file isn't compatible between Clojure/ClojureScript.

Foi útil?

Solução

This is a new feature from Clojure 1.7 : Reader conditionals.

Also see Daniel Compton blog, for example :

#?(:clj  (Clojure expression)
   :cljs (ClojureScript expression)
   :clr  (Clojure CLR expression))

You may also want to look at macrovitch.

Outras dicas

you could check *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"

This could be useful in cases where you can't split the language neutral bits into their own file (which is preferable). My personal opinion tends towards avoiding using too many of such things.

 (defmacro if-clojurescript [clj-form cljs-form]
    (if *clojure-version* clj-form cljs-form))

Not really a macro, but a Leiningen plugin that produces Clojure or ClojureScript code based on a metadata annotations placed in your source: cljx

There is some stalled work called Feature Expressions to implement a general mechanism for supporting different variants of Clojure in the same codebase.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top