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



给定的代码片段由返回选项类型的方法调用组成。如果上一个调用返回 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
  }

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

是的,orElse更干净一点:

def amountToPay : Option[TextBoxExtraction] =
  getMaxByFontsize(keywordAmountsWithCurrency)
    .orElse(getMaxByFontsize(keywordAmounts))
    .orElse(highestKeywordAmount)
    .orElse(getMaxByFontsize(amountsWithCurrency))
    .orElse(highestAmount)

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

最新更新