在clojure中的Scala类

Aym*_*men 10 java jvm scala clojure

这是我今天早上遇到的一个愚蠢的问题:我们可以使用来自clojure的Scala类吗?

因为如果答案是肯定的,我肯定会学习Clojure ^^

Mic*_*zyk 17

Scala类是Java类,您可以非常方便地使用Clojure中的Java类.

玩得开心学习Clojure.:-)

  • 使用`gen-class`或者说`definterface` +`deftype`(或`defrecord`),你可以随意调用你的方法.请注意,Clojure本身仅使用类作为实现细节(用户不一定需要知道的低级别)和(在高级别)互操作场景.纯Clojure代码是围绕与Java代码完全不同的概念构建的; 如果你想混合Clojure和基于Java/Scala类的代码,你可以通过在Clojure中实现可靠的功能块然后暴露包装类(这是相当简单的事情)来获得最佳里程. (7认同)
  • @ abhin4v:当然,如果你真的想从Java调用Clojure函数,你会做一些像`clojure.lang.RT.var("clojure.core","偶数?").invoke(2)` ,避免令人讨厌的沉思.(这相当于`(#'clojure.core/even?2)`;或者,您可以使用`.get`和`.invoke`从Var中提取函数.) (4认同)
  • 不幸的是,是的.就像`blank?`变成`blank_QMARK`.那是因为Java(或JVM?)不支持标识符中的这些字符. (2认同)

Dan*_*ral 10

Scala类,是的.Scala单例对象,具有与Java相同的年份签名.斯卡拉特征,没有.Scala暗示,哈,你开玩笑吧!

因此,体验的范围可以从"ok",如果只是你的类,到非常不愉快,例如Scala集合.

  • 我不知道implicits,但是traits是接口,可能还有helper类.Daniel Spiewak在Sc​​ala/Java互操作上有一个很好的文章(http://www.codecommit.com/blog/java/interop-between-java-and-scala),其中包括一个关于使用Java特征的部分; 从这一点来看,对于不是"纯抽象"的特征来说,它会变得乏味,但在Clojure中,大部分乏味的东西 - 或许几乎所有 - 都可以用宏来抽象掉. (4认同)