gpt4 book ai didi

scala - 大/长案例类别上的模式匹配

转载 作者:行者123 更新时间:2023-12-04 13:26:13 25 4
gpt4 key购买 nike

在这样的案例类上,是否存在更易读,更健壮(重构)的方法?

例子

案例类

具有许多“领域”的非常长的案例类。

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

也可以。对更改订单稳定。在 guard 队中进行更多检查会变得非常麻烦。还必须重复读取该值。
res match {
case data: Data if data.userId.isDefined && data.orders == 6 => (data.userId.get,data.orders)
case _ => ...
}

问题改写

有没有办法结合变体A和B来获得两种方法的好处?

最佳答案

您可以使用自定义提取器:

res match {
case ExtractUserIdAndOrders(Some(id), 6) => ...
case _ => ...
}

在哪里
object ExtractUserIdAndOrders {
def unapply(data: Data) = Some((data.userId, data.orders))
}

如果只需要一次,则可以在方法内部定义它;也可以在多个相似匹配的更广泛范围内定义它。

关于scala - 大/长案例类别上的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39139815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com