Qual è il modo idiomatico di applicare una funzione A => Try[B]
su un List[A]
e restituire sia il primo risultato di successo Some[B]
(entra in corto circuito) o se tutto fallisce, ritorna None
Scala: Prova fino primo successo in un elenco
voglio fare qualcosa di simile:
val inputs: List[String] = _
def foo[A, B](input: A): Try[B] = _
def main = {
for {
input <- inputs
} foo(input) match {
case Failure(_) => // continue
case Success(x) => return Some(x) //return the first success
}
return None // everything failed
}
Domanda correlata. Cosa accadrebbe se volessi prima "Success [A]" o l'ultimo "Failure"? – pathikrit
@wrick: 'val tmp = inputs.toStream.map (foo); tmp.find (_. isSuccess) oElse tmp.lastOption' – senia