为什么应该选择Scala中的异常处理选项?

所以我正在学习功能 Scala,而这本书说异常会引用透明度,因此应该使用Option,就像这样:

def pattern(s: String): Option[Pattern] = {
  try {
    Some(Pattern.compile(s))
  } catch {
    case e: PatternSyntaxException => None
  }
}

这似乎很糟糕我的意思是,它似乎相当于:

catch(Exception e){
    return null;
}

除了我们可以将“null for error”与“null as true value”区分开的事实.它似乎应该至少返回一些包含错误信息,如:

catch {
    case e: Exception => Fail(e)
}

我失踪了什么

解决方法

在这个特定部分,选项主要用作一个例子,因为使用的操作(计算平均值)是部分函数,​​它不会为所有可能的值产生一个值(集合可能为空,因此无法计算平均值)和Option可能是一个有效的情况.如果您无法计算平均值,因为集合为空,只需返回无.

但是有很多其他方法可以解决这个问题,你可以使用[L,R],左边是错误结果,右边是一个很好的结果,你仍然可以抛出一个异常,并将它包装在一个Try对象(由于它在Promise和Future计算中使用,现在似乎更常见),如果错误实际上是一个验证问题,您可以使用ScalaZ Validation.

您应该从这一部分中得到的主要概念是错误应该是函数的返回类型的一部分,而不是类型无法合理声明的一些魔术操作(异常).

作为一个无耻的插件,我做了关于Either and Try here博客.

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...