[英]Error handling monads in Scala? Try vs Validation
scalaz.Validation
比Try
monad更强大,因为它可以累积错误。
在任何情况下,您都可以选择Try
over scalaz.Validation
或scalaz.\\/
吗?
支持Try
的最重要的论据是它在标准库中。 它也被用在标准库,例如您注册回调Future
的onComplete
必须从功能Try
。 将来可能会在标准库中更广泛地使用它。
它在标准库中的事实也意味着它会让更多人熟悉。 您可能会在使用的更多第三方库中找到它。 当然,有时您可能由于其他一些很好的理由而被禁止使用Scalaz(或任何其他依赖项),或者可能想要避免使用Scalaz。
其他内容:我不记得我上次写的\\/
在左侧没有Throwable
情况(我有,这不是我经常做的事情)。 Try
烘烤一下,这样您就不必担心编写别名或其他内容。
正如senia在上面的评论中指出的那样,在偏向一个类似的类型但仍使用“ left”和“ right”的语言(如\\/
确实如此)时,可以说有些不直观。 为什么\\/
通过右侧绑定? 因为确实如此,这就是原因。 我个人并不觉得该名称令人反感,但我可以理解为什么有人会这么做。 Try
通过使构造函数名称清楚地表明其语义来避免该问题: Success
和Failure
,而不是Left
和Right
或-\\/
和\\/-
。
现在我们已经有了使用Try
的完全肤浅和主观的理由,有些人可能会认为\\/
和-\\/
和\\/-
很难看。 我通常不介意运算符繁重的代码,并且发现斜线和破折号的混杂实在令人难以打字和阅读。
因此,根据要求,这些是支持Try
一些论点,但最后我会说我自己从未使用过它。 我并不特别在乎它违反monad法则的事实(尽管我能理解人们为什么这样做),但是我确实发现\\/
和Validation
的即席性更小,更容易推理,我喜欢有机会获得两个( Validation
时,我希望积累错误 , \\/
当我需要一元排序 )在一个单一的框架。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.