2012-08-13 47 views
13

我很熟悉scala类/对象可以从clojure中调用,因为scala编译为字节码,并且clojure很适应它。clojure和scala interop

然而,它是无痛的调用clojure函数,并从scala中导入命名空间?

我想混合优秀的电梯框架和clojure,基本上调用电梯clojure代码。

+0

我知道人们已经为JRuby-Clojure和JRuby-Scala编写了桥梁,如果有人还没有完成Clojure-Scala,我会非常惊讶。 – 2012-08-13 13:04:01

回答

12

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

如果你想编译的Clojure代码,并将其包含在类路径中一个JAR那么这个帖子应该是相关的:

Calling Clojure from Java

如果你宁愿动态编译/解释.clj文件那么你应该阅读:

Clojure Programming: Invoking Clojure from Java

第一个选项似乎更好对我很重要。

+2

+1,但我认为第二个选项真的值得考虑。这是更“动态”的选择,如果您将Clojure用作一种嵌入式脚本语言,该选项非常有用。它避免了预编译Clojure类的需要。 – mikera 2012-08-13 06:57:04

+0

在scala中使用'var'有一个小问题 - 你需要在它周围加反引号。前一段时间我需要互操作并创建了这个包装:https://gist.github.com/HairyFotr/4995607 – HairyFotr 2013-02-20 13:46:27

0

FWIW,我最近有过类似的经历。在clojure代码库中使用scala库并不总是直截了当的。如果图书馆的作者在设计api时一直关注无斯卡拉消费者,那么整合可能是微不足道的。如果没有,你可能不得不学习你尝试使用的scala库生成的java接口的细节。

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