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.type
是 e
的单例类型。什么 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 模式匹配的主要内容,如果未能解决你的问题,请参考以下文章