【问题标题】:clojure and scala interopclojure 和 scala 互操作
【发布时间】:2012-08-09 08:40:55
【问题描述】:

我很熟悉可以从 clojure 调用 scala 类/对象,因为 scala 编译为字节码,并且 clojure 对此很满意。

但是,调用 clojure 函数和从 scala 导入命名空间是不是很轻松?

我想把优秀的lift框架和clojure混合起来,基本上是从lift调用clojure代码。

【问题讨论】:

  • 我知道人们已经为 JRuby-Clojure 和 JRuby-Scala 编写了桥梁,如果有人没有编写 Clojure-Scala,我会感到非常惊讶。

标签: scala clojure


【解决方案1】:

Scala 中的导入语义与 Java 基本相同。通过阅读如何从 Java 调用 Clojure 代码,您应该能够获得所需的信息,然后在 Scala 中应用相同的原则。

如果您想编译 Clojure 代码并将其作为 JAR 包含在您的类路径中,那么这篇文章应该是相关的:

Calling Clojure from Java

如果您希望动态编译/解释 .clj 文件,那么您应该阅读以下内容:

Clojure Programming: Invoking Clojure from Java

第一个选项对我来说似乎更好。

【讨论】:

  • +1,虽然我认为第二个选项确实值得考虑。这是更“动态”的选择,如果您将 Clojure 用作一种嵌入式脚本语言,这将非常有用。它避免了预编译 Clojure 类的需要。
  • 在 scala 中使用 var 有一个小问题 - 你需要在它周围加上反引号。我不久前需要互操作并制作了这个包装器:gist.github.com/HairyFotr/4995607
【解决方案2】:

FWIW,我最近也有类似的经历。在 clojure 代码库中使用 scala 库并不总是那么简单。如果库作者在设计 api 时考虑到了非 scala 消费者,那么集成可能是微不足道的。如果不是,您可能需要了解您尝试使用的 scala 库生成的 java 接口的详细信息。

我最近写了一篇关于这个确切主题的文档 (https://github.com/grandbora/clojure-scala-cantrips#clojure-scala-cantrips),并且有一些 clojure 库为使用 scala 库提供了糖语法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多