2013-05-12 116 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 }