1

我希望我的 traitOuter有两个抽象成员类型Inner1Inner2. 我也想Inner2有抽象成员类型Inner1。我想提出一个Outer#Inner1等于的要求Inner2#Inner1。最方便的方法是什么?到目前为止我有

trait HaveInner1 {
  type Inner1
}

trait Outer {
  type Inner1
  type Inner2 <: HaveInner1

  //    require Inner1 == Inner2#Inner1;
  def ?[T](implicit v: T): T = v
  implicit var ev: Inner2#Inner1 =:= Inner1 = ?[Inner2#Inner1 =:= Inner1]
}

最后两个陈述不是那么漂亮。是否有更惯用的方式来处理同样的事情?

4

1 回答 1

2
trait HaveInner1 {
  type Inner1
}

trait Outer /*extends HaveInner1*/ { outer =>
  type Inner1
  type Inner2 <: HaveInner1 { type Inner1 = outer.Inner1 }
}
于 2013-06-04T10:10:17.497 回答