在 Scala 中处理 monad 时出错?尝试与验证

2024-04-12

scalaz.Validation据说比Trymonad,因为它会累积错误。

有没有什么场合你可以选择Try over scalaz.Validation or scalaz.\/ ?


支持的最重要论据Try是它在标准库中。这也是used在标准库中 - 例如您注册的回调Future's onComplete必须是来自的函数Try。未来可能会在标准库中得到更广泛的使用。

它位于标准库中的事实也意味着它会被更多人所熟悉。您可能会倾向于在您使用的更多第三方库中找到它。当然,有时您可能不被允许使用 Scalaz(或任何其他依赖项),或者可能出于其他充分的理由想要避免使用 Scalaz。

其他事情:我不记得上次写这篇文章是什么时候了\/那个没有Throwable在它的左侧(我有——只是我不经常这样做)。Try烘焙这个,所以你不必担心编写别名或其他什么。

As senia https://stackoverflow.com/users/406435/senia在上面的评论中指出,对于偏向类似类型但仍然使用“左”和“右”的语言(如\/是,并且确实)。为什么\/从右侧绑定?因为确实如此,这就是原因。我个人并不认为这个命名令人反感,但我可以理解为什么有些人可能会这样。Try通过使用明确指示其语义的构造函数名称来避免此问题:Success and Failure, not Left and Right or -\/ and \/-.

现在我们已经了解了使用的完全肤浅和主观的原因Try,有些人可能只是认为\/ and -\/ and \/-很丑。我通常不介意使用大量运算符的代码,而且我发现乱七八糟的斜线和破折号打字和阅读起来非常不愉快。

这些是一些支持的论点Try,按照要求,但我最后会说我自己从来没有使用过它。我不太关心这个事实违反单子法则 https://groups.google.com/forum/#!topic/scala-debate/K6wv6KphJK0%5B101-125-false%5D(虽然我能理解人们为什么这样做),但我确实发现\/ and Validation更少的临时性和更容易推理,而且我喜欢同时访问两者(Validation 当我想要累积错误时 https://stackoverflow.com/a/12309023/334519, \/ 当我需要单元测序时 https://stackoverflow.com/q/20065853/334519)在一个单一的框架中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Scala 中处理 monad 时出错?尝试与验证 的相关文章

随机推荐