这基本上是包装java工厂方法,如果不能基于输入创建项,这些方法就会抛出异常。我在基础库中查找类似以下内容:
def exceptionToOption[A](f: => A):Option[A] ={
try{
Some(f)}
catch{
case e:Exception => None}
}
用法:
val id:Option[UUID] = exceptionToOption(UUID.fromString("this will produce None"))
我知道我可以写我自己的,但我想确认一下,我不是在重复发明轮子。
发布于 2011-11-05 03:26:04
使用scala.util.control.Exception
import scala.util.control.Exception._
allCatch opt f
你可以让它变得更复杂。例如,要仅捕获算术异常并检索异常:
scala> catching(classOf[ArithmeticException]) either (2 / 0)
res5: Either[Throwable,Int] = Left(java.lang.ArithmeticException: / by zero)
发布于 2011-11-05 01:52:40
可以,您可以查看scala.util.control.Exception
对象。特别是allCatch
函数。
发布于 2014-06-16 20:30:09
从Scala2.10开始,您可以在scala.util.Try中运行代码(例如工厂方法),然后使用toOption
对其进行转换
import scala.util.Try
Try("foo".toInt).toOption // None
Try("7".toInt).toOption // Some(7)
或者翻译成您的原始示例:
val id: Option[UUID] = Try(UUID.fromString("this will produce None")).toOption
https://stackoverflow.com/questions/8013435
复制相似问题