2014-04-07 72 views
6

什麼是做到這一點的最好辦法:減少scala中的選項?

def reduce[A](x: Option[A], y: Option[A])(f: (A, A) => A): Option[A] = 
    (x, y) match { 
    case (Some(a), Some(b)) => Some(f(a, b)) 
    case (None, None) => None 
    case (_, None) => x 
    case (None, _) => y 
    } 

我看着this的問題,但他的情況是從我的略有不同...

回答

14

最短可能是

(x ++ y).reduceLeftOption(f) 

這因爲從OptionIterable的隱式轉換,這恰好有一種方法可以完全滿足您的需求。