我是 Scala 新手。我有一个操作需要在执行前检查先决条件。
def get(a: Option[A], b: Option[B], c: Option[C]): (Option[Error], Option[String]) = {
if (a.isEmpty)
return (Some(Error), None)
if (b.isEmpty)
return (Some(Error), None)
val ab = a.get + b.get
if (ab < null)
return (Some(Error), None)
// Some complex computations
(None, Some(str))
}
由于我不喜欢嵌套 if block ,所以我想知道是否有更好的方法来构造此代码、排除 return 语句和 if block 嵌套。
最佳答案
首先,我建议将返回类型更改为 Either[Error, String]。
那么我不确定这个风格是否更好。
def get(a: Option[A], b: Option[B], c: Option[C]): Either[Error, String] = {
val result = for {
va <- a
vb <- b
ab = va * vb
if ab > 10
} yield {
"complex code"
}
result map { Right(_) } getOrElse Left(error)
}
关于scala - Scala 有没有办法在不使用 if 嵌套的情况下转义多个 return 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22034165/