Clojure / ClojureScript和.cljc它们如何一起交互?

时间:2017-09-28 23:37:38

标签: clojure clojurescript

我对.cljc文件格式感到困惑。我想知道在.cljc源文件中Clojure和ClojureScript函数是否可以一起交互。此外,我想知道是否可以从cljc拨打cljcljs源文件。例如,如果我在.cljc源文件中定义一个函数,我可以从ClojureScript源文件中调用该函数吗?

1 个答案:

答案 0 :(得分:3)

  

我想知道在.cljc源文件中是否可以使用Clojure和   ClojureScript函数可以一起交互。

是的,如果公共代码与平台无关,那么这是可能的,尤其是微不足道的,例如:

(defn my-reduce [xs]
  (reduce + xs))

上述代码中的所有函数和表单都存在于ClojureScript和Clojure中,因此您无需执行任何额外操作即可使其工作。

使用reader conditionals

还可以包含与平台相关的代码段
(ns my-namespace.foo
  (:require
    [clojure.string :refer [split]]
    #?(:clj [clojure.data.json :as json])))

(defn to-json [x]
  #?(:cljs (clj->js x)
     :clj (json/write-str x)))

在上面的代码中,使用了标准阅读器条件#?

  

如果我在.cljc源文件中定义一个函数,我可以调用它   来自ClojureScript源文件的函数?

是的,绝对,但要小心确保您调用的代码不包含任何特定于JVM的代码。

在我的代码示例中,您可以从ClojureScript或Clojure调用to-json,因为我一直小心翼翼地隔离读者条件中的平台差异。