Во всяком случае, до сих пор ничего не вышло, и я не слышал, что какая-то работа ведется к этой цели. Вы можете присоединиться к сообществу через его списки рассылки и внести свой вклад в его развитие.
у предложить способ определения нового метода в некотором существующем классе в 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)?