2011-03-26 47 views

回答

27

您需要一種通用的方式來處理「忽略」。選項和其他類中提供了這個(除其他外)。所以,你可以:

val i = 7 
Some(i) collect { 
    case 3 => "Yay!" 
    case 5 => "Boo!" 
} 

得到None(類型爲Option[String])。所以基本上,如果您將x match更改爲Some(x) collect,您將獲得所需的功能。當你對處理選項感到滿意時,最好這樣做。

2

任何不能處理所有可能的輸入值的匹配塊都會形成一個部分函數,​​這是絕對可以在Scala中定義和使用的。

PartialFunctionFunction的子類,並添加了isDefinedAt方法,如果它與提供的值具有已定義的匹配,則返回true。部分函數最適用於測試定義的位置,例如捕獲塊或2.8集合API中的collect方法。否則,如果您嘗試使用未定義爲輸入的值調用它,您將會收到異常。

+0

除了例外,我相信你也會在定義網站上發出警告,不是嗎? – Blaisorblade 2011-03-26 23:51:53

11

寫一個通用的匹配:

object Match { 
    def default: PartialFunction[Any, Unit] = { case _ => } 
    def apply[T](x: T)(body: PartialFunction[T, Unit]) = (body orElse default)(x) 
} 

例子:

scala> 1 to 5 foreach (Match(_) { 
    | case 2 => println("two") 
    | case 3 => println("three") 
    | } 
    |) 
two 
three 

您可能會感興趣太PartialFunction的同伴對象的方法condcondOpt

+0

感謝您的回覆。那麼對於'foreach'是否沒有任何類似'collect'類型函數的內建函數? – 2014-11-04 08:53:43

+0

@MatthewSaltz沒有。 – 2014-11-05 18:43:37

相關問題