是否有关于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 */ )
如果您希望以后再编写方法。但是我认为第一种方法可能是最清晰的。