Scala:如何对样例类的特定Option字段进行模式匹配检查?
使用模式匹配检查Option字段是否已设置
针对你定义的CompanyInput样例类,可以直接通过样例类模式匹配精准筛选出maybeField1、maybeField2、maybeField3三个字段都包含有效值(即被Some包裹)的场景,全程保留字段的Option类型。
基础检查实现
如果只需要判断三个字段是否都已设置,用以下方式:
def areRequiredFieldsSet(input: CompanyInput): Boolean = input match { case CompanyInput(Some(_), Some(_), Some(_), _, _) => true case _ => false }
提取字段值的实现
如果需要同时获取三个字段的具体有效值,可以在匹配时提取:
def getRequiredFields(input: CompanyInput): Option[(field1, field2, field3)] = input match { case CompanyInput(Some(f1), Some(f2), Some(f3), _, _) => Some((f1, f2, f3)) case _ => None }
结合业务逻辑的扩展匹配
如果需要在匹配时处理其他字段(比如时区、能力列表),可以直接在模式中补充对应的匹配规则:
input match { case CompanyInput(Some(f1), Some(f2), Some(f3), Some(tz), caps) => // 三个必填字段+时区都有值,执行业务逻辑 println(s"处理公司数据:$f1, $f2, $f3 | 时区:$tz | 能力列表:$caps") case CompanyInput(Some(f1), Some(f2), Some(f3), None, caps) => // 三个必填字段已设置,但时区缺失,做对应降级处理 println(s"处理公司数据:$f1, $f2, $f3 | 时区未配置 | 能力列表:$caps") case _ => // 至少一个必填字段未设置,抛出提示或终止流程 println("必填字段未完全配置,请检查输入") }
这种方式完全保留了原字段的Option类型,仅通过模式匹配过滤出符合要求的输入场景,满足你的需求。
内容的提问来源于stack exchange,提问作者Stefan Vrecic
相关产品推荐
相关产品推荐

