Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 为理解而写作的可能方法,以处理多个选项_Scala - Fatal编程技术网

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。