我对.cljc文件格式感到困惑。我想知道在.cljc源文件中是否可以将Clojure函数和ClojureScript函数交互在一起。另外,我想知道是否可以从cljc调用clj,cljs源文件。例如,如果我在.cljc源文件中定义了一个函数,可以从ClojureScript源文件调用该函数吗?
发布于 2017-09-29 02:16:36
我想知道在.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特定的代码。
在我的代码示例中,您可以从to-json或Clojure调用ClojureScript,因为我非常小心地隔离了读取器条件符中的平台差异。
https://stackoverflow.com/questions/46479756
复制相似问题