所以我正在学习功能
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的博客.