【发布时间】:2009-12-16 10:02:32
【问题描述】:
如果我想在 Scala 中为类添加方法,我需要执行以下操作:
class RichFoo(f: Foo) {
def newMethod = f.bar()
}
object RichFoo {
implicit def foo2Rich(f: Foo) = new RichFoo(f)
}
然后f.newMethod 将导致创建RichFoo 实例并调用其方法。
我试图理解为什么它的定义与 Ruby 不同:
override class Foo {
def newMethod = bar
}
编译器可以查看此定义,并使用静态方法 newMethod 创建一个 FooOverride 类,该类获取 Foo 类型的参数并调用其 bar 方法。这就是 Scala 实现特征的方式。我仍然需要导入包含 Foo 覆盖的包才能使用它。
它似乎涉及更少的输入,不需要我发明名称,并且具有更好的性能(不调用方法并创建对象)。隐式转换方法所做的任何事情都可以在附加方法中完成。
我确定我错过了一些东西,并想深入了解一下。
【问题讨论】:
-
在这种情况下,Ruby 的性能真的优于 Scala,还是您推测开放类实现可以像封闭类一样快?
-
我建议一个外观,看起来像是在重新打开一个类,但实际上只是调用静态方法。 scala 编译器一直在做这样的事情(特征被编译成一个接口和一个带有静态方法的类)。我推测与当前的隐式defs方式相比,它的编码更少,速度更快
标签: scala