Scala 2:如何对Case Class进行错误类型的模式匹配?
正确的Scala模式匹配写法
你的问题出在模式匹配的目标对象是AEMError实例,而非直接的Option类型,所以需要解构AEMError的字段来匹配对应的错误类型。以下是修正后的代码:
def throwErrorAndLogMessage(error: AEMError, message: String): Unit = { error match { // 匹配存在认证错误的情况,同时提取错误实例 case AEMError(Some(authErr), None) => println(s"认证错误: $message, 详情: $authErr") throw authErr // 匹配存在未知错误的情况,同时提取错误实例 case AEMError(None, Some(unexpectedErr)) => println(s"未知错误: $message, 详情: $unexpectedErr") throw unexpectedErr // 匹配两个错误都存在的边界情况(如果业务允许这种情况) case AEMError(Some(authErr), Some(unexpectedErr)) => println(s"同时存在认证错误和未知错误: $message, 认证详情: $authErr, 未知错误详情: $unexpectedErr") throw new Exception(s"复合错误: $authErr | $unexpectedErr") // 匹配无错误的兜底情况 case AEMError(None, None) => println(s"无错误信息,但收到调用: $message") } }
关键点说明:
- 直接针对
AEMError的构造器进行模式匹配,解构出authError和unexpectedError两个字段 - 使用
Some(errInstance)匹配有值的Option,同时可以直接提取内部的错误实例(比如authErr) - 兜底分支覆盖所有未匹配的情况,包括两个错误同时存在的场景
内容的提问来源于stack exchange,提问作者Shivam Sahil
相关产品推荐
相关产品推荐

