通用嵌套选项模式匹配

我有一个带有case类的数据结构,一个字段中还包含了一个选项:

case class Name(value: Option[String]) extends AnyVal
case class Data(id: Int,name: Option[Name],isDefault: Boolean)

所以我想处理名称的某些情况,上选项的情况也是如此。但是,当名称不存在时,我希望使用None而不是Some(Name(None))作为结果。 我试图做这样的事情:

def handlenestedOptions(value: Option[String]): Option[Name] = {
  value match {
    case Some(data) => Some(Name(Some(data)))
    case None => None
  }
}

但是我也想以一种通用的方式来使用它,以便它可以与我拥有的相同结构的任何案例类一起使用。那么,如何更改此实现以使其更通用? 一般而言,我的意思是这样的: def handlenestedOptions[T,K](value: Option[K]): Option[T]

xz7474 回答:通用嵌套选项模式匹配

这是解决问题的一种方法。

def handleNestedOptions[T,U](value :Option[T],f :Option[T]=>U) :Option[U] =
  if (value.isEmpty) None
  else Option(f(value))

handleNestedOptions(None,Name)        //res0: Option[Name] = None
handleNestedOptions(Some("str"),Name) //res1: Option[Name] = Some(Name(Some(str)))
本文链接:https://www.f2er.com/3125563.html

大家都在问