具有*(varargs)参数的案例类的模式匹配

Omi*_*mid 3 scala pattern-matching

我有两个案例类:

case class B(value:Int)
case class A(a:String, b:B*) extends ALike
Run Code Online (Sandbox Code Playgroud)

我想在A的实例上进行模式匹配:

def foo(al:ALike) = {
  al match {
    case A(a, bs) => ...
  }
}
Run Code Online (Sandbox Code Playgroud)

Scalac不明白这bs是一个Seq[B]并且认为它只是一个B.为什么会这样,我该如何进行模式匹配呢?

Zol*_*tán 8

这是一个varargs参数,所以你需要明确地向编译器解释.使用以下case表达式:

def foo(al:ALike) = {
  al match {
    case A(a, bs @ _*) => ...
  }
}
Run Code Online (Sandbox Code Playgroud)