具有视图边界的扩展方法依赖于扩展对象

时间:2013-11-30 14:05:34

标签: scala implicit-conversion implicit

我正在尝试为类定义一些扩展方法,如下所示。其中一个方法需要接受一个可转换为路径依赖类型的参数,该类型在其路径中包含扩展对象。遗憾的是,编译在调用站点失败,因为编译器似乎没有认识到视图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)
}

1 个答案:

答案 0 :(得分:0)

将扩展方法定义替换为:

def extensionMethod[T <% outer.Inner](argument : T) { }

def extensionMethod[T <% Outer#Inner](argument : T) { }