scala - Scala匹配:使用仅在子类中可用的值
问题描述
我有代码
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)
}
推荐阅读
- angular - 引导模式中的自动完成谷歌 api 位置即使在 DOM 中也不会出现
- c# - 无法在 Onturnasync 方法中使用 CancelAllDialogsAsync 方法
- php - 通过正则表达式删除没有属性的 CSS 类
- android - 导航到嵌套目的地的最佳方式
- javascript - 从原始 tx 解码数据
- c# - 无法翻译 LINQ 子查询 Where 子句
- c# - C# - 重命名 DataView 列
- javascript - Google Firebase - 重新格式化 JSON 输出
- android - 无法导入 android.os.storage.VolumeInfo 也无法使用 getVolumes() API
- spring - 何时使用 Spring Prototype vs Request vs Session 范围?任何现实生活中的例子