如何检测Clojure运行时环境?

如何检测Clojure运行时环境?,clojure,clojurescript,Clojure,Clojurescript,我已经用Clojure编写了一个非常简单的日期库,我希望能够在JVM中运行代码时以及使用ClojureScript将代码编译为Javascript时使用它。美中不足的是如何检测代码所在的运行时环境,以便宏可以使用平台自己的日期字符串解析机制。每个平台的日期对象 人们应该如何编写一个可以跨不同部署平台(如JVM、JS、CLR等)重用的库。?我知道有人可能会用正则表达式欺骗和解析日期字符串,但这很难涵盖从各种人类语言解析月份名称的情况,内置的日期解析库很好地解决了这一问题。您可以使用以下杂项变量:

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


人们应该如何编写一个可以跨不同部署平台(如JVM、JS、CLR等)重用的库。?我知道有人可能会用正则表达式欺骗和解析日期字符串,但这很难涵盖从各种人类语言解析月份名称的情况,内置的日期解析库很好地解决了这一问题。

您可以使用以下杂项变量:


使用“解析”找出定义了哪些变量:

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

user=> *clojure-version*
{:major 1, :minor 5, :incremental 1, :qualifier nil}
Clojure具有切换b/w运行时的特殊规则

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

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

(print *runtime*) ;; :clojure
看看cljx-
user=> (resolve '*clojurescript-version*)
nil
user=> (resolve '*clojure-version*)
#'clojure.core/*clojure-version*

user=> *clojure-version*
{:major 1, :minor 5, :incremental 1, :qualifier nil}
(def ^:dynamic *runtime*
  #?(:clj :clojure)
  #?(:cljs :clojurescript))

(print *runtime*) ;; :clojure