我制作了自己的特征和类框架,扩展了我的特质。所有类的父级都是名为“合同”的特征。 “Combinator”和“ElementaryContract”是合同的两个直接子女。
def disintegrateContract[T](element: T): Elem =
{
element match
{
case com <: Combinator => matchCombinator(com)
case e <:ElementaryContract =>matchElementaryContract(e)
}
}
我想创建一个匹配类来识别传递的'Contract'是'Combinator'或'ElementaryContract'的子类型,然后将其传递给其他一些函数。 这是我得到的编译错误:
'=>' expected but '<:' found
可能它无法识别子类型运算符。我怎样才能做到这一点?
答案 0 :(得分:2)
如果理解正确,通常的模式匹配应该没问题 - 如果Bar扩展Foo,它是Foo (加上别的东西):
class SuperA
class ImplA extends SuperA
class SuperB
class ImplB extends SuperB
def disintegrateContract[T](element: T) = element match {
case a: SuperA => println("I'm ancestor of Super A")
case b: SuperB => println("I'm ancestor of Super B")
}
disintegrateContract(new ImplA)
// I'm ancestor of Super A
disintegrateContract(new ImplB)
// I'm ancestor of Super B
为了确定你的情况应该有超级SuperA和SuperB将扩展,但它没有任何改变。