如何将模式匹配应用于此代码?所以它看起来像用函数式编写的代码:
def getIndex(i: Int): Option[Int] = {
if (check0(i) == Some) {
check0(i)
}
else if (check1(i) == Some) {
check1(i)
}
else if (check2(i) == Some) {
check2(i)
}
else if (check3(i) == Some) {
check3(i)
}
else {
None
}
}
方法check0, check1, check2, check3
全部返回Option[Int]
答案 0 :(得分:6)
不是模式匹配,但应该做到这一点:
checkTop(clickedIndex) orElse
checkBottom(clickedIndex) orElse
checkLeft(clickedIndex) orElse
checkRight(clickedIndex)
orElse是为Option定义的方法。定义选项时,它会自行返回一个选项,否则会尝试替代选项。
答案 1 :(得分:1)
这个怎么样:
def getIndex(i: Int) = check0(i) match {
case None => check1(i) match {
case None => check2(i) match {
case None => check(3)
case some2 => some2
}
case some1 => some1
}
case some0 => some0
}
答案 2 :(得分:1)
不是说这是最简单的解决方案,而是真正的功能性:
def multiCheck(checks: ((Int) => Option[Int])*)(i: Int) =
checks.foldLeft[Option[Int]](None)(_ orElse _(i))
multiCheck(check0, check1, check2, check3)(2)