我有代码
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)
}