Scala 为理解而写作的可能方法,以处理多个选项
我定义了一个返回选项的函数 下面的代码工作正常Scala 为理解而写作的可能方法,以处理多个选项,scala,Scala,我定义了一个返回选项的函数 下面的代码工作正常 def func :Option[Result]= { (for { src <- ele2 id <- ele } yield { src match { case "test2" => Option(id.value).map(_.take(3)) .filterNot(_ == "de").map(id => Result(id)) case
def func :Option[Result]= {
(for {
src <- ele2
id <- ele
} yield {
src match {
case "test2" => Option(id.value).map(_.take(3))
.filterNot(_ == "de").map(id => Result(id))
case _ => None
}
}).getOrElse(None)
}
def func:Option[结果]={
(用于{
src结果(id))
案例=>无
}
}).getOrElse(无)
}
如果我删除getOrElse(None)
我会得到编译错误,该错误是Iterable[Option[Result]]
与预期类型Option[Result]
我想摆脱getOrElse(None)
。有没有可能的方法来编写代码如何:
val res: Option[Result] = for {
src <- ele2
if src == "test2"
id <- ele
} yield Result(id.value)
val res:Option[Result]=for{
Scala中的srcFor comprehension只是flatMap
和map
的语法糖。在某些情况下,最好使用flatMap
和map
重写For comprehension
def func:Option[结果]={
ele2.flatMap{src=>
ele.flatMap{id=>
src匹配{
案例“test2”=>选项(id.value).map(u.take(3))
.filterNot(==“de”).map(id=>Result(id))
案例=>无
}
}
}
}
另一个选项是从yield
中提取逻辑以实现功能
def func:Option[结果]={
def innerLogic(src:String,id:Demo):选项[Result]={
src匹配{
案例“test2”=>选项(id.value).map(u.take(3))
.filterNot(==“de”).map(id=>Result(id))
案例=>无
}
}
为了{
src I在case“test2”=>Option(id.value).map(id=>Result(id))
Edited my中有一些过滤逻辑和其他逻辑code@coder25这难道不意味着改变Yuval答案中的收益率以匹配您的编辑吗?它说返回类型是Option[Option[Result]],预期是Option[Result]val res:Option[Result]=for{src@TheArchetypalPaul请看一看,我认为缺少了一些信息,什么是ele
和ele2
?如果ele
是一个可重复的,那么您的代码可以失败,因为您正在映射它们的值,返回一个Iterable。