如何在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
}
}