是否有关于Scala模式匹配可能性的完整规范?

我无法修复以下代码:

  something match {
    case e @ (sae: ServerApiException if sae.statusCode == 401 | _: UnauthorizedException) => {
      doSomething(e)
    }
    ...
  }


(它不会在2.8.1中进行编译。)

最佳答案

我不确定我会以这种方式编写代码。很难遵循(除了不能以其原始形式工作)。

我宁愿去喜欢

def doSomething(e: Exception) = { /* whatever */ }
something match {
  case sae: ServerApiException if (sae.statusCode == 401) => doSomething(sae)
  case ue: UnauthorizedException => doSomething(ue)
}


避免重复的代码。或者您可以使用选项:

(something match {
  case sae: ServerApiException if (sae.statusCode == 401) => Some(sae)
  case ue: UnauthorizedException => Some(ue)
  case _ => None
}).foreach(e => /* do something */ )


如果您希望以后再编写方法。但是我认为第一种方法可能是最清晰的。

09-26 03:13