使用“选项”字段检查事例类,以确保所有事例类都为“无”,使用“无形状 HList”



我有一个案例类(简化(:

case class UserData(name: Option[String], age: Option[String]) {
  lazy val nonEmpty = name.isDefined || age.isDefined // TODO
}

例如,我是否可以使用 Shapeless 的 HList 替换当前nonEmpty检查实现,以便枚举所有字段以检查它们是否都设置为 None 或至少有一个字段具有值?

case class UserData(name: Option[String], age: Option[String]) {
  lazy val isEmpty = this.productIterator.forall(_ == None)
}
UserData(None,None).isEmpty
UserData(None,Some("s")).isEmpty

我想你想在案例类中做不同的行为,如果你不这样做,那么@pamu答案就是你正在寻找的。如果你真的想使用无形,你可以,但没有必要。

我想你也使用 productIterator 检查纯 scala .

scala> val data = UserData(None, None)
data: UserData = UserData(None,None)
scala> data.productIterator.forall {
     | case x: Option[_] => x.isDefined
     | case _ =>  false
     | }
res2: Boolean = false
scala> val data = UserData(Some("foo"), Some("bar"))
data: UserData = UserData(Some(foo),Some(bar))
scala> data.productIterator.forall {
     | case x: Option[_] => x.isDefined
     | case _ =>  false // you may throw exception if you are not expecting this case
     | }
res3: Boolean = true

最新更新