sintaxis programar introduccion instanciar crear clases clase scala scala-option

programar - En Scala, ¿hay una función de biblioteca preexistente para convertir excepciones a Opciones?



scala introduccion (4)

Básicamente, esto es para envolver los métodos de fábrica de java que arrojan excepciones si el artículo no se puede crear en base a las entradas. Estoy buscando algo en la biblioteca base como:

def exceptionToOption[A](f: => A):Option[A] ={ try{ Some(f)} catch{ case e:Exception => None} }

Uso:

val id:Option[UUID] = exceptionToOption(UUID.fromString("this will produce None"))

Sé que puedo escribir el mío, pero quiero comprobar que no estoy reinventando la rueda.


A partir de Scala 2.10, puede ejecutar su código (por ejemplo, el método de fábrica) en un scala.util.Try y luego convertirlo con toOption :

import scala.util.Try Try("foo".toInt).toOption // None Try("7".toInt).toOption // Some(7)

O traducido a su ejemplo original:

val id: Option[UUID] = Try(UUID.fromString("this will produce None")).toOption



Scalaz proporciona Validación [+ E, + A] que es similar a Either .

val result: Validation[Throwable, Something] = ... result match { case Success(x) => ... case Failure(x) => ... }


Utilice scala.util.control.Exception :

import scala.util.control.Exception._ allCatch opt f

Y puedes hacerlo más sofisticado. Por ejemplo, para capturar solo excepciones aritméticas y recuperar la excepción:

scala> catching(classOf[ArithmeticException]) either (2 / 0) res5: Either[Throwable,Int] = Left(java.lang.ArithmeticException: / by zero)