是否可以在 abstract class 中混合 trait,但在 Scala 中使其特定于每个 subclass?

Is it possible to mix in trait in abstract class but make it specific to each subclass in Scala?

我在 Scala 中为逻辑表达式编写了一些代码,我想知道是否可以找到一种方法将特征混合到抽象中 class,这样我就不必在每个子项中扩展它class。这是我得到的:

abstract class LogicExpression

case class Literal(lit:String, not:Boolean) extends LogicExpression with Ordered[Literal]
case class Conjunction(lits:Seq[Literal]) extends LogicExpression with Ordered[Conjunction]
...

我希望每个案例 class 都只能与它自身的另一个实例进行比较(文字与文字、连词仅与连词等),但我想扩展抽象中的特征 class 所以我不必在每个 subclass 上重复它。这可能吗?

我试过了

abstract class LogicExpression extends Ordered[LogicFormula]

但这也允许比较 Literal 和 Conjunction,例如。

你需要这样的东西:

sealed trait LogicExpression[T <: LogicExpression[T]] extends Ordered[T]

case class SomeExpression() extends LogicExpression[SomeExpression] {
  override def compare(that: SomeExpression) = ???
}