考虑下面代码:scala是否支持许多模式匹配的默认子句?
val first = ...
val second = ...
val third = ...
val fours = ...
first match {
case "someString" => second match {
case s:String => third match {
case MyEnum.A => //some logic
case MyEnum.B => fours match {
case Some(old:String) => //some other logic
case default=> defaulLogic
}
case default=> defaulLogic
}
case default=> defaulLogic
}
case default=> defaulLogic
}
private def defaulLogic()= {
//log error here
}
有没有把case default
逻辑到一个地方,而不是在每一个模式匹配复制它的一种方式?
注意
目前只有match-case
statments顶部,其实有更多的案件。
将尝试捕捉切服务表现? – Cherry
只有在没有匹配的情况下才抛出MatchError。如果跌破很少,那就会很快。如果fall through是常见的情况,那么构造MatchError,捕获堆栈跟踪和捕获的开销可能很重要。 –
这很危险。这个异常可能在'some logic'块内被抛出,然后它不应该被'defaultLogic'处理。 –