有没有办法链接方法以getOrElse的方式返回Option-Type,但保留选项类型

And*_*ann 18 scala

给定方法调用的片段组合,返回选项类型.如果之前的调用返回None,我想调用下一个方法.我能够用这个片段完成这个

def amountToPay : Option[TextBoxExtraction] =
  getMaxByFontsize(keywordAmountsWithCurrency) match {
    case None => getMaxByFontsize(keywordAmounts) match {
      case None  =>  highestKeywordAmount match {
        case None => getMaxByFontsize(amountsWithCurrency) match {
          case None => highestAmount
          case some => some
        }
        case some => some
      }
      case some => some
    }
    case some => some
  }
Run Code Online (Sandbox Code Playgroud)

但它看起来很混乱.所以我希望有更好的方法来做到这一点.

Tra*_*own 28

是的,orElse是干净了一点:

def amountToPay : Option[TextBoxExtraction] =
  getMaxByFontsize(keywordAmountsWithCurrency)
    .orElse(getMaxByFontsize(keywordAmounts))
    .orElse(highestKeywordAmount)
    .orElse(getMaxByFontsize(amountsWithCurrency))
    .orElse(highestAmount)
Run Code Online (Sandbox Code Playgroud)

您也可以将项目放入a中Seq,然后使用xs.reduceLeft(_ orElse _)或类似的东西xs.flatten.headOption.getOrElse(highestAmount).

  • `:paste`将在REPL中执行操作(我希望我们可以在stackoverflow中提出编辑而不是直接提交更改) (2认同)