【发布时间】:2016-08-25 08:04:11
【问题描述】:
有没有一种更易读、更健壮(重构)的方式来匹配这样的案例类?
示例
案例分类
包含许多“字段”的非常长的案例类。
case class Data(name: String, time: Long, ..., userId: Option[UUID] ..., orders: Int, ... ) //more fields fields more
模式匹配:变体 a
有效。但是当字段位置发生变化时容易出错。一个最终计数_。
res match {
case data@Data(_,_,_,_,_,_,Some(id),_,_,_,6,_,_) => (id, data.orders)
case _ => ...
}
模式匹配:变体 b
也可以。对变化的订单很稳定。在警卫中进行更多检查会变得非常麻烦。还必须重复读取值。
res match {
case data: Data if data.userId.isDefined && data.orders == 6 => (data.userId.get,data.orders)
case _ => ...
}
问题改写
有没有一种方法可以结合变体 A 和 B 以获得两种方法的好处?
【问题讨论】:
-
我知道这不一定有帮助 - 但看起来你真正的问题是有一个如此复杂的案例类开始。如果可能,请考虑将其分解为较小的案例类的层次结构,这些小案例类包含在
Data案例类中的字段中。这并不是说这不是一个有趣的问题:)