Scala match:使用仅在子类中可用的值



我有代码

abstract class Base
case class C1(val value1: Int) extends Base
case class C2(val value2: Int) extends Base
def match_test(thing: Base) = thing match {
case _: C1 => println(C1.value1)
case _: C2 => println(C2.value2)
}

但是,编译器会产生错误(大致(:

value1 is not a member of object C1
value2 is not a member of object C2

我不明白为什么要产生此错误。 在每种情况下,它都匹配一个子类,并且该子类具有所需的值。

如何正确进行这种类型的模式匹配?

您需要在类的实例上引用 val,而不是类本身:

def matchTest(thing: Base) = thing match {
case x: C1 => println(x.value1)
case y: C2 => println(y.value2)
}

你也可以像这样解压缩对象,因为你使用的是案例类:

def matchTest(thing: Base) = thing match {
case C1(v1) => println(v1)
case C2(v2) => println(v2)
}

最新更新