【问题标题】:Interfacing Clojure and Clojurescript接口 Clojure 和 Clojurescript
【发布时间】:2014-05-07 14:39:21
【问题描述】:

我想让我现有的 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"]
   ...

【问题讨论】:

    标签: clojure clojurescript


    【解决方案1】:

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

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

    【讨论】:

    • 我要第二点:CLJX 提供了一个合理的框架,您可以在其中编写与 Clojure 和 Clojurescript 兼容的代码,然后在必要时分叉两条不同的路径。
    【解决方案2】:

    自从写了这个问题以来,Clojure reader conditionals 已经出现在核心语言中(而.cljx 是一个库)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多