是否有与Scala中使用的ADT模式的子类型相关的OO概念? 特别是我想将方法添加到更专业的类型。例如,给定一个泛型列表ADT:Scala中的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),因为case类不支持(case-to-case)继承,所以没有办法将DuckCons与泛型Cons相关联,这样它就可以在模式匹配中工作,所以泛型为列表定义的方法不适用于DuckList。
”此转换是隐式提供的,因此用户不需要明确传递它。“什么转换?有一个简单的隐含参数,对吧?没有转换AFAIK。 – Felix
@Felix对,我错过了。 –
所以这个解决方案允许扩展定义(先前定义的)泛型方法的类型特定行为,但它实际上并不允许新方法的定义正确吗?所以我只能在我的示例中实现'feed'方法,如果它已经在'List'中可用,至少作为一个抽象方法。 – estolua