我有以下类层次结构:
class A
class B extends A
class C extends A
然后,还有另一个类接受这些类的实例,并且有一个方法,其中可能有两种模式匹配情况,如下所示:
class D (one: A, two: A) {
def work {
(one, two) match {
case (o, t): (B, B) => ... blablabla
case (o, t): (B, C) => ... blablabla
case _ =>
}
}
}
但是,何时应该解决匹配以支持第二种情况
(B, C)
,它尝试将其解析为 (B, B)
并提出了 C cannot be cast to B
的类转换异常.为什么?该怎么办?我怎样才能解决这个问题?
最佳答案
您的语法不太正确(无法编译)。
这虽然有效:
object Matcher extends App {
class A
class B extends A
class C extends A
class D(one: A, two: A) {
def work {
(one, two) match {
case (o: B, t: B) => println("B")
case (o: B, t: C) => println("C")
case _ =>
}
}
}
val d1 = new D(new B, new B)
val d2 = new D(new B, new C)
d1.work
//B
d2.work
//C
}
关于Scala - 模式匹配相关类型的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11986892/