在val初始化时捕获MatchError并使用Scala中的模式匹配?

Rog*_*ach 4 scala

MatchError在使用模式匹配赋值时,捕获a的最佳方法(最简洁,最清晰,最惯用)是什么?

例:

val a :: b :: Nil = List(1,2,3) // throws scala.MatchError
Run Code Online (Sandbox Code Playgroud)

到目前为止我找到的最佳方式:

val a :: b :: Nil = try {
    val a1 :: b1 :: Nil = List(1,2,3)
    List(a1, b1)
  catch { case e:MatchError => // handle error here }
Run Code Online (Sandbox Code Playgroud)

这是否有惯用的方法?

Kim*_*bel 7

为什么不简单

val a::b::Nil = List(1,2,3) match {
  case a1::b1::Nil => {
    a1::b1::Nil
  }
  case _ => //handle error
}
Run Code Online (Sandbox Code Playgroud)


mis*_*tor 6

Kim的解决方案略有改进:

val a :: b :: Nil = List(1, 2, 3) match {
  case x @ _ :: _ :: Nil => x
  case _ => //handle error
}
Run Code Online (Sandbox Code Playgroud)

如果您可以提供有关如何处理错误的更多信息,我们可以为您提供更好的解决方案.