我对.cljc
文件格式感到困惑。我想知道在.cljc
源文件中Clojure和ClojureScript函数是否可以一起交互。此外,我想知道是否可以从cljc
拨打clj
,cljs
源文件。例如,如果我在.cljc源文件中定义一个函数,我可以从ClojureScript源文件中调用该函数吗?
答案 0 :(得分:3)
我想知道在.cljc源文件中是否可以使用Clojure和 ClojureScript函数可以一起交互。
是的,如果公共代码与平台无关,那么这是可能的,尤其是微不足道的,例如:
(defn my-reduce [xs]
(reduce + xs))
上述代码中的所有函数和表单都存在于ClojureScript和Clojure中,因此您无需执行任何额外操作即可使其工作。
还可以包含与平台相关的代码段(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
,因为我一直小心翼翼地隔离读者条件中的平台差异。