在这种情况下如何应用模式匹配

时间:2013-07-22 10:33:16

标签: scala pattern-matching

如何将模式匹配应用于此代码?所以它看起来像用函数式编写的代码:

  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]

3 个答案:

答案 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)
相关问题