基类上的模式匹配和Scala中的所有派生类

em7*_*m70 3 generics types scala pattern-matching

我正在努力实现这样的目标:

def a(b: Any) = {
  b match {
     case x: Seq[String] => println("x")
  }
}

// somewhere else

a(List("b"))
Run Code Online (Sandbox Code Playgroud)

因此,我喜欢看到"x"被打印,而我却不喜欢.

基本上我想匹配一个类型/特征,并覆盖其类型派生自/实现此类型/特征的所有对象,特征是Seq,并且类型参数是事先已知的.因为我是scala新手,所以我很困惑.

想法?

kir*_*uku 5

由于类型擦除,您无法检查参数化类型.看到这个问题,为什么会出现警告:有关此Scala模式匹配中未经检查的类型参数的警告?

另一个问题及其答案告诉你如何解决这个问题:如何解决Scala上的类型擦除问题?或者,为什么我不能获得我的集合的类型参数?

不过,当你不检查类型参数时,你的代码工作正常:

scala> List("a") match { case _: Seq[_] => 1 case _ => 2 }
res0: Int = 1
Run Code Online (Sandbox Code Playgroud)

  • *您无法检查参数化类型*有一个小例外 - 数组 (4认同)