2

タイプパラメータを持つトレイトと抽象タイプメンバーを持つトレイトが与えられた場合:

trait Foo[A] {
  def schoko(f: A) : Unit
}
trait Bar {
  type A
  def foo: Foo[A]
}

trait X

trait ConcreteBar extends Bar {
  final type A = X
}

次のいずれかを機能させるための変更はありますか?

trait Mixin extends ConcreteBar {
  _: Foo[A] => // "not found: type A"
  def foo = this
}

trait Mixin[A] extends Bar {
  _: Foo[A] =>
  def foo = this // "found: Mixin[A] with Foo[A]   required: Foo[Mixin.this.A]"
}

trait Mixin[A1] extends ConcreteBar {
  _: Foo[A1] =>
  type A = A1  // "error: overriding type A in trait ConcreteBar, which equals X"
  def foo = this
}
4

1 に答える 1

4

#タイプにアクセスするための構文の使用は機能してAいるようです。

trait Mixin extends ConcreteBar {
   _: Foo[ ConcreteBar#A ] =>
   def foo = this
}

のメンバーはConcreteBar自己型宣言の範囲内にないようです。そのため、型を明示的に参照する必要があります。

于 2012-09-28T16:19:17.133 に答える