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