是否存在与 Scala 中使用的 ADT 模式的子类型化 OO 概念等价的概念?特别是我想为更专业的类型添加方法。例如,给定一个通用列表 ADT:
sealed trait List[+A]
case class Cons[+A](h: A, t: List[A]) extends List[A]
case object Nil[Nothing]
我想为特定类型的列表定义新方法:
sealed trait List[+A]
sealed trait DuckList extends List[Duck] {
def feed(l: DuckList) = ...
}
但是我还必须为这些新类型定义特殊的数据构造函数(DuckCons,DuckNil),并且由于案例类不支持(逐个案例)继承,因此无法将 DuckCons 与泛型相关联缺点是它可以在模式匹配中工作,因此为 List 定义的通用方法不适用于 DuckList。