【发布时间】:2011-04-03 01:42:29
【问题描述】:
今天早上我有一个愚蠢的问题:我们可以使用 clojure 中的 Scala 类吗?
因为如果答案是肯定的,我一定会学习 Clojure ^^
【问题讨论】:
-
为什么是 scala-2.8 标签?该版本有什么特定的吗?
今天早上我有一个愚蠢的问题:我们可以使用 clojure 中的 Scala 类吗?
因为如果答案是肯定的,我一定会学习 Clojure ^^
【问题讨论】:
Scala 类是 Java 类,您可以非常方便地使用 Clojure 中的 Java 类。
享受学习 Clojure 的乐趣。 :-)
【讨论】:
gen-class 和 deftype/defrecord 创建)也可以从 Scala 中使用。下面都是字节码。
blank? 变成blank_QMARK。那是因为 Java(或 JVM?)不支持标识符中的此类字符。
gen-class 或definterface + deftype(或defrecord),您可以随意调用您的方法。请注意,Clojure 本身仅在互操作场景中使用类作为实现细节(在低级别用户不一定需要了解)和(在高级别)。纯 Clojure 代码是围绕与 Java 代码完全不同的概念构建的;如果您想混合使用 Clojure 和 Java / Scala 基于类的代码,您可能会通过在 Clojure 中实现可靠的功能块然后公开包装类(这很简单)来获得最佳效果。
clojure.lang.RT.var("clojure.core", "even?").invoke(2) 的事情,避免讨厌的修改。 (这相当于(#'clojure.core/even? 2);或者,您可以使用.get 和.invoke 从Var 中提取函数。)
Scala 类,是的。 Scala 单例对象,具有与 Java 相同的年份签名。 Scala 特性,不。 Scala 含蓄,哈哈,你开玩笑的!
因此,体验的范围可能从“不错”(如果只是您的课程)到非常不愉快(例如 Scala 集合)。
【讨论】:
值得一提的是接受函数参数的Scala类,例如:
Option.map(f : A => B)
不太可能在 Clojure 中非常有用,因为 Clojure 编译器不会将 Clojure lambda 转换为 scala.FunctionN 的实例。我和丹尼尔在一起——我认为互操作性会很差。
【讨论】: