我有一个匿名类,需要在它混合的特征之前进行初始化。早期初始化不起作用,因为它们不允许使用“this”引用。如果我将类声明为具有 self 类型的内部特征,我可以使它工作,但这似乎不必要地冗长,因为该类型仅在代码中的一个地方使用,并且作为匿名类内联是直观的。但是,我似乎找到了 scala 将接受并满足我的初始化顺序要求的语法。这是一个没有多余细节的简化示例(假设我这样做是有原因的)。
trait WaitCondition[+T] {
...
}
trait EventWaitCondition[+T] extends WaitCondition[T] {
...
}
trait Event { outer =>
private[this] var _cachedWaitCondition : Option[WaitCondition[T]]
def next() : WaitCondition[T] =
//Is there a way to "inline" the defintion of NextWaitCondition
//without screwing up the initialization order?
_cachedWaitCondition.getOrElse{ new NextWaitCondition with EventWaitCondition[T] }
private[this] trait NextWaitCondition { this : WaitCondition[T] =>
outer._cache = Some(this)
....
}
....
}
所以,基本上,我的问题是,有没有办法将 NextWaitCondition 的定义内联为匿名类型,而不改变 NextWaitCondition 和 WaitCondition 之间的初始化顺序(即,让 NextWaitCondition 仍然首先初始化)?