Scala:在模式匹配中使用超类型操作符

tyky79it  于 6个月前  发布在  Scala
关注(0)|答案(1)|浏览(72)

我创建了自己的traits框架和扩展traits的类。所有类的父类都是名为“Contract”的trait。“Combinator”和“ElementaryContract”是Contract的两个直接子类。

def disintegrateContract[T](element: T): Elem = 
{

    element match
    {
      case com <: Combinator =>  matchCombinator(com)
      case e <:ElementaryContract =>matchElementaryContract(e)
    }
}

字符串
我想创建一个match类,它可以识别传递的'Contract'是'Combinator'还是'ElementaryContract'的子类型,然后将其传递给其他函数。这是我得到的编译错误:

'=>' expected but '<:' found


可能它不识别子类型操作符。我如何才能使这种情况发生?

rkttyhzu

rkttyhzu1#

如果理解正确,通常的模式匹配应该没问题--如果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 extend SuperA")
   case b: SuperB =>  println("I extend SuperB")
}

disintegrateContract(new ImplA)
// I extend SuperA
disintegrateContract(new ImplB)
// I extend SuperB

字符串
为了准确地了解您的情况,应该有SuperA和SuperB将扩展的Super,但它不会改变任何东西。

相关问题