2013-05-12 72 views
1

我想写一个函数,它返回一个基于输入参数的函数。使用模式匹配返回函数

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 
} 

谢谢。

回答

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 
} 
+0

谢谢。更复杂的场景呢?可以使用模式匹配吗? – 2013-05-12 10:50:27

+0

@More Than Five Updated – Mik378 2013-05-12 10:54:39

+0

在这种情况下,模式匹配没有意义,但如果直接在整数上匹配,编译器可以创建一个switch/case语句。 – drexin 2013-05-12 10:55:59

0

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

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