首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Scala中,是否有一个预先存在的库函数用于将异常转换为选项?

在Scala中,是否有一个预先存在的库函数用于将异常转换为选项?
EN

Stack Overflow用户
提问于 2011-11-05 01:29:28
回答 5查看 3.5K关注 0票数 22

这基本上是包装java工厂方法,如果不能基于输入创建项,这些方法就会抛出异常。我在基础库中查找类似以下内容:

代码语言:javascript
复制
 def exceptionToOption[A](f: => A):Option[A] ={
    try{
      Some(f)}
    catch{
      case e:Exception => None}
  }

用法:

代码语言:javascript
复制
val id:Option[UUID] = exceptionToOption(UUID.fromString("this will produce None"))

我知道我可以写我自己的,但我想确认一下,我不是在重复发明轮子。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-05 03:26:04

使用scala.util.control.Exception

代码语言:javascript
复制
import scala.util.control.Exception._

allCatch opt f

你可以让它变得更复杂。例如,要仅捕获算术异常并检索异常:

代码语言:javascript
复制
scala> catching(classOf[ArithmeticException]) either (2 / 0)
res5: Either[Throwable,Int] = Left(java.lang.ArithmeticException: / by zero)
票数 17
EN

Stack Overflow用户

发布于 2011-11-05 01:52:40

可以,您可以查看scala.util.control.Exception对象。特别是allCatch函数。

票数 11
EN

Stack Overflow用户

发布于 2014-06-16 20:30:09

从Scala2.10开始,您可以在scala.util.Try中运行代码(例如工厂方法),然后使用toOption对其进行转换

代码语言:javascript
复制
import scala.util.Try
Try("foo".toInt).toOption  // None
Try("7".toInt).toOption    // Some(7)

或者翻译成您的原始示例:

代码语言:javascript
复制
val id: Option[UUID] = Try(UUID.fromString("this will produce None")).toOption
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8013435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档