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_Scala Cats - Fatal编程技术网

如何在Scala中干净地验证函数输入并返回未来

如何在Scala中干净地验证函数输入并返回未来,scala,scala-cats,Scala,Scala Cats,我有一个函数(我删除了这些类型,因为我更关心如何把东西拼凑在一起): def func(opt1:Option,opt2:Option)=未来{ 为了{ o1您可以优雅地使用Scala解决这个问题。在任何情况下,您都需要处理其中一个选项为none或两个选项均为none的情况 如果一个或两个值均为无,则返回失败的未来。 case class NoneFoundException(msg: String) extends Exception(msg) def func(opt1: Option,

我有一个函数(我删除了这些类型,因为我更关心如何把东西拼凑在一起):

def func(opt1:Option,opt2:Option)=未来{
为了{

o1您可以优雅地使用Scala解决这个问题。在任何情况下,您都需要处理其中一个选项为none或两个选项均为none的情况

如果一个或两个值均为无,则返回失败的未来。

case class NoneFoundException(msg: String) extends Exception(msg)

def func(opt1: Option, opt2: Option) = {
 val result = 
  for {
    value1 <- opt1
    value2 <- opt2
  } yield someFutureReturningFunction(value1, value2)

 result.getOrElse {
  Future.failed(NoneFoundException("one or both of opt1, opt2 are none."))
 }

}
case类NoneFoundException(msg:String)扩展异常(msg)
def func(opt1:选项,opt2:选项)={
val结果=
为了{

价值1我个人会选择
getOrElse(Future.failed)
def func(opt1: Option, opt2: Option) = Future {
  for {
    o1 <- opt1
    o2 <- opt2
  } yield functionThatReturnsAFuture(o1, o2)
}
case class NoneFoundException(msg: String) extends Exception(msg)

def func(opt1: Option, opt2: Option) = {
 val result = 
  for {
    value1 <- opt1
    value2 <- opt2
  } yield someFutureReturningFunction(value1, value2)

 result.getOrElse {
  Future.failed(NoneFoundException("one or both of opt1, opt2 are none."))
 }

}
sealed trait Result[+A]

case class ReturnedValue[+A](value: A) extends Result[A]

case class NoneFound extends Result[Nothing]

 def func(opt1: Option, opt2: Option) = {
  val result = 
   for {
     o1 <- opt1
     o2 <- opt2
   } functionThatReturnsAFuture(o1, o2).map(value => ReturnedValue(value))

  result.getOrElse {
   NoneFound
  }

}