我正在尝试为类定义一些扩展方法,如下所示。其中一个方法需要接受一个可转换为路径依赖类型的参数,该类型在其路径中包含扩展对象。遗憾的是,编译在调用站点失败,因为编译器似乎没有认识到视图boudns定义中对“外部”的引用是指与调用站点处的“外部”相同的对象。有没有办法解决这个问题,以便注释行编译?
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)
}
答案 0 :(得分:0)
将扩展方法定义替换为:
def extensionMethod[T <% outer.Inner](argument : T) { }
到
def extensionMethod[T <% Outer#Inner](argument : T) { }