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

时间:2012-05-02 11:43:38

标签: 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
  }

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

1 个答案:

答案 0 :(得分:27)

是的,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)之类的内容。