Если я хочу добавить метод в класс в 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
}
Компилятор может просмотреть это определение и создать класс FooOverride со статическим методом newMethod, который получает параметр типа Foo и вызывает его метод bar. Вот как Scala реализует черты. Мне все еще нужно импортировать пакет, содержащий переопределение Foo, чтобы использовать его.
Кажется, он требует меньше набора текста, не требует, чтобы я придумывал имена, и имеет лучшую производительность (не вызывает метод и не создает объект). Все, что делает метод неявного преобразования, может быть сделано внутри дополнительного метода.
Я уверен, что что-то пропустил и хотел бы понять, что.