我有一个案例类(简化(:
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