与Clojure和Clojurescript的接口交互

3
我希望能够让我的现有Clojure库可以在Clojurescript中使用,并创建可以在Clojure和Clojurescript中运行的新应用程序。
我知道Clojure和Clojurescript有它们各自的差异,以及像cljx这样的元编程解决方案。但是,我已经将我的Clojure代码限制为与Clojurescript兼容的子集,我只想从Clojurescript调用Clojure(可能反之亦然)。我看到core.match等库中有这种可能性,但我无法复制其中的操作方法。
目前我遇到了“没有这样的命名空间”的问题,我不确定是否是因为这不可能,还是因为我的命名空间或目录结构出了问题,或者其他原因。
具体来说,我的目录结构如下:
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个回答

2

2

您不可以在cljs运行时包含clj代码。clj文件将被包含到宏中(这些宏在clj中定义,很可能是您在core.match中看到的内容)。

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


我同意这个观点:CLJX提供了一个合理的框架,让你可以编写兼容Clojure和Clojurescript的代码,并在必要时分别走两条不同的路径。 - KendallB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接