Scala - 模式匹配相关类型的元组

标签 scala pattern-matching tuples

我有以下类层次结构:

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/

相关文章:

c++ - 比较和排序元组中的元素

scala - Scala 中同一个 protected case 语句中的多个条件?

scala - Play Framework 2 : test a request with a json string as body

list - 将选项转换为 sml 中的列表

java - 在java中使用正则表达式如何从字符串中的某个位置找到最后3个单词

python - 对元组列表进行排序

c++ - 无法创建其中包含空元组的一元元组 (c++0x)

scala - 如何仅模拟/ stub 案例类中的一个字段

scala - 元组的可迭代值上的ReduceByKey

batch-file - 用于删除目录中具有唯一根茎的文件的批处理脚本