Scalac bug或我的误解?

我在我的SBT构建中设置-Xfatal-warnings编译器标志,确定这段代码不能编译:

package example

sealed trait Errors

object Errors {
  case class BadFirstName(name: String) extends Errors
  case class BadLastName(name: String) extends Errors
}

...

def handleError(errors: Errors): String = errors match {
  case BadFirstName(name) => s"$name is bad"
}

我看到错误[错误]它会在以下输入上失败:BadLastName(_)

但是如果我为BadFirstName匹配添加一个守卫,它会编译而不会出现错误或警告:

def handleError(errors: Errors): String = errors match {
  case BadFirstName(name) if name.startsWith("t") => s"$name is bad"
}
...
Done compiling.

然后在运行时用可怕的[错误] scala.MatchError:BadLastName(…)炸毁

对我来说这看起来像个错误,但我想检查一下我是否错过了什么?

最佳答案 是的,这是一个错误,即
SI-5365.

点赞