Я не уверен, что написал бы код таким образом; это трудно следовать (в дополнение к не работает в своем первоначальном виде).
Я бы предпочел что-то вроде
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 */ )
если вы предпочитаете писать метод позже. Но я думаю, что первый способ, вероятно, самый ясный.