繁体   English   中英

在Scala中处理单子错误? 尝试与验证

[英]Error handling monads in Scala? Try vs Validation

scalaz.ValidationTry monad更强大,因为它可以累积错误。

在任何情况下,您都可以选择Try over scalaz.Validationscalaz.\\/吗?

支持Try的最重要的论据是它在标准库中。 它也被用在标准库,例如您注册回调FutureonComplete必须从功能Try 将来可能会在标准库中更广泛地使用它。

它在标准库中的事实也意味着它会让更多人熟悉。 您可能会在使用的更多第三方库中找到它。 当然,有时您可能由于其他一些很好的理由而被禁止使用Scalaz(或任何其他依赖项),或者可能想要避免使用Scalaz。

其他内容:我不记得我上次写的\\/在左侧没有Throwable情况(我有,这不是我经常做的事情)。 Try烘烤一下,这样您就不必担心编写别名或其他内容。

正如senia在上面的评论中指出的那样,在偏向一个类似的类型但仍使用“ left”和“ right”的语言(如\\/确实如此)时,可以说有些不直观。 为什么\\/通过右侧绑定? 因为确实如此,这就是原因。 我个人并不觉得该名称令人反感,但我可以理解为什么有人会这么做。 Try通过使构造函数名称清楚地表明其语义来避免该问题: SuccessFailure ,而不是LeftRight-\\/\\/-

现在我们已经有了使用Try的完全肤浅和主观的理由,有些人可能会认为\\/-\\/\\/-很难看。 我通常不介意运算符繁重的代码,并且发现斜线和破折号的混杂实在令人难以打字和阅读。

因此,根据要求,这些是支持Try一些论点,但最后我会说我自己从未使用过它。 我并不特别在乎它违反monad法则的事实(尽管我能理解人们为什么这样做),但是我确实发现\\/Validation的即席性更小,更容易推理,我喜欢有机会获得两个( Validation 时,我希望积累错误\\/ 当我需要一元排序 )在一个单一的框架。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM