scala - Scala 有没有办法在不使用 if 嵌套的情况下转义多个 return 语句

标签 scala functional-programming return

我是 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/

相关文章:

scala - 如何使用 Eclipse 调试 Scala 宏

scala - Spark数据帧过滤器

javascript - 使用 Typescript 将一个对象文字映射到另一个对象文字

ios - Swift 编译器错误 : "Expression too complex" on a string concatenation

javascript - javascript 嵌套 if(){if(){}} 函数中位置对 "return true/false"的影响

Javascript 返回冒号

scala - 无需指定输入类型即可定义高阶函数的巧妙方法

haskell - 找到一个定理的计算解释

仅当行数大于零时,mysql 查询才返回

scala - 如何附加到 Scala 中的文件?