使用模式匹配返回一个函数

时间:2013-05-12 10:29:04

标签: scala pattern-matching

我正在尝试编写一个基于输入参数返回函数的函数。

def myFunction(x: Int): x => Boolean {
  x => if (x < 7) false
       if (x % 2 == 0) false
       else true
}

因此,如果x小于7,甚至会返回false。否则就是。

如何使用模式匹配来编写它?

如果对Ints使用模式匹配毫无意义,那么像Ints列表那样更复杂的东西呢。

def myFunction(myList: List[Int]): x => Boolean {
  // just doing something simple here real life is more complex.
  x => if (myList.size() < 7) false
       else true
}

感谢。

2 个答案:

答案 0 :(得分:1)

在处理原始对象时,模式匹配是无用的。

其他替代方案是:

Option(3).map(x => x < 7 || x % 2 == 0).getOrElse(false)

但是对于这个简单的情况,我更喜欢简单的if/else

对于第二种情况,基于List[Int]返回部分函数的函数将是:

def myFunction(myList: List[Int]): List[Int] => Boolean = {
    case _ :: Nil  if (myList.size < 7) => false
    case _ => true
}

答案 1 :(得分:0)

我通常会像这样模仿匹配。任何表达式都返回一个值 - 如果是else,匹配应该具有大致相同的结果。

  x match{
    case x if x < 7 => false
    case x if (x % 2 == 0) => false
    case _ => true   }