Scala模式匹配写法优化咨询:现有代码是否最优、能否更简洁?
Scala模式匹配代码优化解答
你给出的写法不是Scala模式匹配的最优实现,存在冗余逻辑,可以进一步精简。
核心冗余点说明
- 冗余的变量绑定+match结构:
employee => employee match属于完全可省略的写法,Scala的flatMap支持直接传入偏函数作为参数 - 重复使用守卫条件做字段值判断,没有用到模式匹配的解构特性,代码冗余度高
- 字段名
type是Scala保留关键字,直接使用会报编译错误,需要额外处理
精简实现方案
版本1:基础精简(不改动原有类定义)
直接省略冗余的变量绑定和match关键字,仅保留匹配逻辑:
response.flatMap { case e if e.`type` == Manager => e.headoffice case e if e.`type` == Clerk => e.branch case _ => None }
版本2:最优惯用法(Employee为样例类场景)
如果Employee是样例类(case class),可以直接对构造参数做解构匹配,完全去掉守卫条件,代码更简洁,匹配性能也更高:
// 假设Employee样例类定义为:case class Employee(`type`: Role, headoffice: Option[T], branch: Option[T]) response.flatMap { case Employee(Manager, headoffice, _) => headoffice case Employee(Clerk, _, branch) => branch case _ => None }
额外注意
如果实际业务中headoffice和branch返回的不是Option类型,需要在返回时手动包裹Some(),否则会触发编译错误。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

