Scala 模式匹配

Posted

技术标签:

【中文标题】Scala 模式匹配【英文标题】:Scala patternmatching 【发布时间】:2021-12-17 06:29:15 【问题描述】:

我在 Scala 中有以下用于模式匹配的代码:

response.flatMap(employee =>
            employee match 
              case e if e.type == Manager => e.headoffice
              case e if e.type == Clerk => e.branch
              case _ => None
            
          )

这是进行模式匹配的最佳方式吗?能不能更简洁一点?

【问题讨论】:

这里的e.type 是什么?自定义方法?无论如何,您可以删除整个 employee => employee match 并执行 response.flatMap case ... e.type是Employee中的一个字段,枚举类型 e.typee 的单例类型。什么 Scala 版本应该编译这个?这整个线程生活在什么奇怪的平行宇宙中,问题和答案都没有任何意义...... O_o?? @AndreyTyukin 在任何人中,您只需要使用反引号来修饰 type 字段:scastie.scala-lang.org/BalmungSan/jV1iSWOHQEuiXobySFvpqw/2 - 我不想专注于此,因为 OP 已经提到它是一个字段。 - 无论如何,将我的答案编辑为语法正确。 【参考方案1】:

您可以尝试在type上进行匹配:

response.flatMap(e => e.type match 
    case Manager => e.headoffice
    case Clerk => e.branch
    case _ => None
)

【讨论】:

【参考方案2】:

我个人会这样做:

response.map(e => e -> e.`type`).flatMap 
  case (e, Manager) => e.headoffice
  case (e, Clerk) => e.branch
  case _ => None

【讨论】:

编译在哪个版本上?

以上是关于Scala 模式匹配的主要内容,如果未能解决你的问题,请参考以下文章

Scala 匹配模式

Spark记录-Scala模式匹配

scala 常用模式匹配类型

Scala笔记--模式匹配

Scala笔记--模式匹配

小记--------scala-模式匹配