我希望我的特质Outer
有两个抽象成员类型Inner1
和Inner2
。我希望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]
}
最后两个陈述并不那么漂亮。对于同样的事情,有更多的惯用方法吗?
答案 0 :(得分:2)
trait HaveInner1 {
type Inner1
}
trait Outer /*extends HaveInner1*/ { outer =>
type Inner1
type Inner2 <: HaveInner1 { type Inner1 = outer.Inner1 }
}