You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 19:40:30