如何检测Clojure运行时环境?

时间:2013-11-22 14:43:48

标签: clojure clojurescript

我在Clojure中编写了一个非常简单的日期库,我希望能够在我的代码在JVM中运行以及使用ClojureScript编译为Javascript时使用它。美中不足的是如何检测代码所在的运行时环境,以便宏可以使用平台自己的日期字符串解析机制。每个平台的日期对象

如何编写可以在不同的部署平台(如JVM,JS,CLR等)上重用的库?我知道有人可能会使用正则表达式来欺骗和解析日期字符串,但这并不容易涵盖从内置日期解析库很好地解决的各种人类语言中解析月份名称的情况。

3 个答案:

答案 0 :(得分:2)

使用resolve查找定义的变量:

user=> (resolve '*clojurescript-version*)
nil
user=> (resolve '*clojure-version*)
#'clojure.core/*clojure-version*

user=> *clojure-version*
{:major 1, :minor 5, :incremental 1, :qualifier nil}

答案 1 :(得分:0)

你可以使用这些misc vars:

http://clojuredocs.org/clojure_core/clojure.core/clojure-version

Returns clojure version as a printable string.

http://clojuredocs.org/clojure_core/clojure.core/clojure-version

The version info for Clojure core, as a map containing :major :minor 
:incremental and :qualifier keys. Feature releases may increment 
:minor and/or :major, bugfix releases will increment :incremental. 
Possible values of :qualifier include "GA", "SNAPSHOT", "RC-x" "BETA-x"

答案 2 :(得分:0)

Clojure有特殊的Conditional reader规则来切换黑白运行时。

在您的示例中,它将类似于:

(def ^:dynamic *runtime*
  #?(:clj :clojure)
  #?(:cljs :clojurescript))

(print *runtime*) ;; :clojure