我在Scala中为Logic Expressions编写了一些代码,我想知道我是否能找到一种方法将特性混合到一个抽象类中,所以我不必在每个子类中扩展它。这就是我所拥有的:
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]
...
我希望每个case类只能与另一个自身的实例相比较(Literal with Literal,Conjunction只与Conjunction等)但是我想在抽象类中扩展这个特性所以我不必在每个子类上重复它。这可能吗?
我试过
abstract class LogicExpression extends Ordered[LogicFormula]
但这样也可以比较Literal和Conjunction。
答案 0 :(得分:4)
你需要这样的东西:
sealed trait LogicExpression[T <: LogicExpression[T]] extends Ordered[T]
case class SomeExpression() extends LogicExpression[SomeExpression] {
override def compare(that: SomeExpression) = ???
}