Я хочу найти способ определить новый метод в некотором существующем классе в Scala.
Например, я думаю, что у метода asInstanceOf[T]
слишком длинное имя, я хочу заменить его на as[T].
Прямой подход может быть:
class WrappedAny(val a: Any) {
def as[T] = a.asInstanceOf[T]
}
implicit def wrappingAny(a: Any): WrappedAny = new WrappedAny(a)
Есть ли более естественный способ с меньшим количеством кода?
Также, когда я пытаюсь это сделать, происходит странная вещь:
scala> class A
defined class A
scala> implicit def toA(x: Any): A = x
toA: (x: Any)A
scala> toA(1)
И консоль зависла. Кажется, что toA(Any)
не должен проходить этап проверки типа, и не может, когда это неявно. И помещение всего кода во внешний исходный код может вызвать ту же проблему. Как это случилось? Это ошибка компилятора (версия 2.8.0)?