2013-11-22 96 views
4

我用Clojure写的一个非常简单的日期图书馆,我希望能够使用它都当我的代码在JVM上运行,当它被编译为JavaScript与ClojureScript。在美中不足的是如何检测的代码是运行环境中,这样的宏可能使用平台自有的日期字符串解析机制。每个平台的日期对象如何检测Clojure运行时环境?

应该怎么写,可能在不同的部署平台,如JVM,JS,CLR等可重复使用图书馆吗?我知道,人们可能会欺骗和解析与正则表达式的日期字符串但不会轻易涵盖种类繁多,其内置的日期解析库解决相当不错人类语言的解析月份名称的情况。

+0

看看cljx - https://github.com/lynaghk/cljx – edbond

回答

1

您可以使用这些其它瓦尔:

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" 
3

使用决心找出乏定义:

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

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

决心不cljs可用。 : - / –

0

Clojure的有特殊Conditional reader规则,交换机B/W的运行时间。

在您的例子,它会是这样的:

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

(print *runtime*) ;; :clojure