Scala 视图边界依赖于扩展对象的扩展方法
我试图为一个类定义一些扩展方法,如下所示。其中一个方法需要接受可转换为路径相关类型的参数,该类型在其路径中包含扩展对象。不幸的是,在调用站点编译失败,因为编译器似乎无法识别视图定义中对“outer”的引用引用与调用站点中的“outer”引用的对象相同。是否有办法修复此问题,以便编译注释行Scala 视图边界依赖于扩展对象的扩展方法,scala,implicit-conversion,implicit,Scala,Implicit Conversion,Implicit,我试图为一个类定义一些扩展方法,如下所示。其中一个方法需要接受可转换为路径相关类型的参数,该类型在其路径中包含扩展对象。不幸的是,在调用站点编译失败,因为编译器似乎无法识别视图定义中对“outer”的引用引用与调用站点中的“outer”引用的对象相同。是否有办法修复此问题,以便编译注释行 import scala.language.implicitConversions class Outer { class Inner { } class ConvertsToInner {
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)
}
从以下位置替换扩展方法定义:
def extensionMethod[T <% outer.Inner](argument : T) { }
到
实际上,在这种情况下,它需要是外部的。内部的。
def extensionMethod[T <% Outer#Inner](argument : T) { }