我有以下数据模型,稍后我将对其进行模式匹配:
abstract class A
case class C(s:String) extends A
abstract class B extends A
case class D(i:Int) extends B
case class E(s:Int, e:Int) extends B
A 是层次结构的抽象超类型。C 是 A 的具体子类。A 的其他具体子类是 B 的子类,而 B 又是 A 的子类。
现在,如果我写这样的东西,它的工作原理:
def match(a:A) a match {
a:C => println("C")
a:B => println("B")
}
但是,在 for 循环中,我无法匹配 B。我假设我需要一个构造函数模式,但由于 B 是抽象的,因此 B 没有构造函数模式。
val list:List[A] = List(C("a"), D(1), E(2,5), ...)
for (b:B <- list) println(b) // Compile error
for (b@B <- list) println(b) // Compile error
在这里,我只想打印 B 个实例。这种情况有什么解决方法吗?