gpt4 book ai didi

scala - 为什么在 Scala 中应该更喜欢 Option 进行错误处理而不是异常?

转载 作者:行者123 更新时间:2023-12-04 00:27:20 26 4
gpt4 key购买 nike

所以我正在学习函数式 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主要用作示例,因为所使用的操作(计算 mean )是一个偏函数,它不会为所有可能的值生成一个值(集合可能为空,因此无法计算平均值)和Option在这里可能是一个有效的案例。如果您无法计算mean因为集合是空的,所以只返回一个 None .

但是还有很多其他的方法可以解决这个问题,你可以使用 Either[L,R] , 与 Left是错误结果和 Right作为好的结果,您仍然可以抛出异常并将其包装在 Try 中。对象(现在似乎更常见,因为它用于 PromiseFuture 计算),您可以使用 ScalaZ Validation如果错误实际上是验证问题。

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

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

关于scala - 为什么在 Scala 中应该更喜欢 Option 进行错误处理而不是异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24595400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com