Опитвам се да дефинирам някои методи за разширение за клас, както е показано по-долу. Един от методите трябва да приеме аргумент, който може да се преобразува в тип, зависим от пътя, който включва разширения обект в своя път. За съжаление, компилацията е неуспешна на сайта за повикване, тъй като компилаторът изглежда не разпознава, че препратката към „outer“ в дефиницията на границите на изгледа се отнася до същия обект като „outer“ на сайта за повикване. Има ли начин да се поправи това, така че коментираният ред да се компилира?
import scala.language.implicitConversions
class Outer {
class Inner {
}
class ConvertsToInner {
}
object ConvertsToInner {
implicit def convert(source : ConvertsToInner) = new Inner()
}
}
class Code {
implicit class ExtendsOuter(val outer : Outer) {
def extensionMethod[T <% outer.Inner](argument : T) { }
}
val outer = new Outer()
val convertsToInner = new outer.ConvertsToInner()
//does not compile!
outer.extensionMethod(convertsToInner)
}