如何对抽象成员类型的相等性提出要求

时间:2013-06-04 09:47:47

标签: scala type-members

我希望我的特质Outer有两个抽象成员类型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]
}

最后两个陈述并不那么漂亮。对于同样的事情,有更多的惯用方法吗?

1 个答案:

答案 0 :(得分:2)

trait HaveInner1 {
  type Inner1
}

trait Outer /*extends HaveInner1*/ { outer =>
  type Inner1
  type Inner2 <: HaveInner1 { type Inner1 = outer.Inner1 }
}
相关问题