Scala 通用嵌套选项模式匹配

Scala 通用嵌套选项模式匹配,scala,generics,pattern-matching,options,Scala,Generics,Pattern Matching,Options,我的数据结构中有一个选项,其中包含case类,字段也包含在一个选项中: case class Name(value: Option[String]) extends AnyVal case class Data(id: Int, name: Option[Name], isDefault: Boolean) 因此,我想处理的情况下,有一些名称,同样适用于上层选项。但是当名字没有名字时,我希望结果是没有名字,而不是SomeNameNone。 我试着这样做: def handleNestedOpt

我的数据结构中有一个选项,其中包含case类,字段也包含在一个选项中:

case class Name(value: Option[String]) extends AnyVal
case class Data(id: Int, name: Option[Name], isDefault: Boolean)
因此,我想处理的情况下,有一些名称,同样适用于上层选项。但是当名字没有名字时,我希望结果是没有名字,而不是SomeNameNone。 我试着这样做:

def handleNestedOptions(value: Option[String]): Option[Name] = {
  value match {
    case Some(data) => Some(Name(Some(data)))
    case None => None
  }
}
但我也希望以一种通用的方式使用它,这样它就可以适用于任何与我具有相同结构的case类。那么,我如何改变这个实现,使它更通用呢? 泛型指的是这样的东西:
def handleNestedOptions[T,K]值:Option[K]:Option[T]

这里有一种方法

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)))

这里有一个办法

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)))

@我把它弄混了,应该是名字而不是数据。我已经用正确的选项更新了这个问题,你说的“上一个”选项是什么意思?我的意思是,如果一个名称的值是Some,那么该名称应该是2 somes:SomeNameSomedata@jwvh我搞混了,应该是名字而不是数据。我已经用正确的问题更新了这个问题,上面的选项是什么意思?我的意思是,如果名称的值是Some,那么名称应该是2 somes:SomeNameSomedata