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
Sí, puedes echar un vistazo al objeto scala.util.control.Exception
. Especialmente, la función allCatch
.
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)