如果我想在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覆盖的包来使用它。
它似乎涉及较少的打字,不需要我发明名称,并具有更好的性能(不调用方法和创建一个对象)。任何隐式转换方法都可以在附加方法中完成。
我确定我错过了一些东西,想要深入了解一下。