Scala 使用无形状HList检查带有选项字段的case类,以确保所有这些字段都是None
我有一个案例类:Scala 使用无形状HList检查带有选项字段的case类,以确保所有这些字段都是None,scala,shapeless,Scala,Shapeless,我有一个案例类: case class UserData(name: Option[String], age: Option[String]) { lazy val nonEmpty = name.isDefined || age.isDefined // TODO } 我是否可以使用例如Shapeless'HList来替换非空检查的当前实现,以便枚举所有字段以检查所有字段是否都设置为None或至少有一个字段具有值?我认为您也可以使用productIterator使用纯scala进行检查
case class UserData(name: Option[String], age: Option[String]) {
lazy val nonEmpty = name.isDefined || age.isDefined // TODO
}
我是否可以使用例如Shapeless'HList来替换非空检查的当前实现,以便枚举所有字段以检查所有字段是否都设置为None或至少有一个字段具有值?我认为您也可以使用productIterator使用纯scala进行检查
我想您也可以使用productIterator检查纯scala 我想你想在case类中做不同的行为,如果你不想,那么@pamu-answer就是你想要的。 如果你真的想使用无形状,你可以,但没有必要 我想你想在case类中做不同的行为,如果你不想,那么@pamu-answer就是你想要的。 如果你真的想使用无形状,你可以,但没有必要
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
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