Scala 通用嵌套选项模式匹配
我的数据结构中有一个选项,其中包含case类,字段也包含在一个选项中: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 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