後でパターン マッチングを行う次のデータ モデルがあります。
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 インスタンスのみを出力したいと思います。この場合の回避策はありますか?