20

指定されたスニペットは、オプション タイプを返すメソッド呼び出しで構成されます。前の呼び出しで 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
  }

しかし、それはかなり面倒に見えます。だから私はそれを行うより良い方法があることを願っています。

4

1 に答える 1

33

ええ、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)

于 2012-05-02T11:57:34.950 に答える