连接Clojure和Clojurescript

时间:2014-05-07 14:39:21

标签: clojure clojurescript

我想让我现有的Clojure库可以从clojurescript中使用,也可以创建在Clojure和Clojurescript中运行的新应用程序。

我理解Clojure和Clojurescript有它们的区别,并且有元编程解决方案,例如cljx。但是,我将我的Clojure代码限制为Clojurescript的兼容子集,我只想从clojurescript调用clojure(反之亦然)。我已经在诸如core.match这样的库中看到了这种情况,但是我无法复制那里所做的事情。

我目前正在获取No such namespace,我不确定是不是因为它不可能,或者因为我的命名空间或目录结构错误或其他原因。

具体来说,我有一个表格

的目录结构
src/
  clj/
    clopjys/
      vector.clj
  cljs/
    cljdemo.cljs

我正在尝试使用cljdemo.cljs中的vector.clj,即:

(:require
  [clophys.vector :refer [coords std-uniform-vector]])

我的project.clj有以下条目

  ...
  :source-paths ["src/clj"]
  :cljsbuild {
      :builds [{
          ; The path to the top-level ClojureScript source directory:
          :source-paths ["src/cljs"]
   ...

2 个答案:

答案 0 :(得分:2)

您不能在运行时在cljs中包含clj代码。 clj文件将包含在宏中(在clj中定义,可能就是你在core.match中看到的)。

最好的解决方案是cljx,如果您的代码实际上与clj和cljs兼容,那么您将拥有一个看起来与普通clj文件完全相同的cljx文件。这很简单,很酷,试一试!

答案 1 :(得分:2)

由于这个问题已经写好,Clojure reader conditionals已经出现在核心语言中(而.cljx是一个库)。