为什么猫的效果异步签名使用Ether [Throwable,A]而不使用Try [A]?

问题描述 投票:1回答:1

[很久以前,我们在团队中就使用Try[A]Either[Throwable, A]进行了长时间的辩论,最终选择了Try[A],因为当Either的左侧为Throwable时,它们在语义上是相同的。那时我正在搜索使用Either[Throwable, A]的代码库,但找不到任何代码。

但是今天,当观看法比奥·拉贝拉(Fabio Labella)关于How do Fibers Work? A Peek Under the Hood的演讲时,下列签名让我印象深刻


    def async[A](k: (Either[Throwable, A] => Unit) => Unit): F[A]

所以我的问题是,使用Either[Throwable, A]而不是Try[A]有什么特殊的原因吗?推荐哪一个?

scala error-handling functional-programming scala-cats
1个回答
0
投票

忽略this question的答案,这是差异列表:

  • 都不表示成功和失败,它只是A或B的容器
  • 使用尝试清楚地识别计算中的潜在故障,该故障由异常表示
  • Try [X]的好处是,您可以将进一步的操作链接到它,如果它确实是成功的,它们将执行,如果它是失败的,则它们不会执行
  • Try还有许多其他有用的方法,当然还有其伴随的apply方法,这使其非常适合其预期用途-异常处理。
  • 都可以用来指定错误的描述,该描述可以显示给客户端。试试-用堆栈跟踪包装异常
  • 尝试使用Try的最佳候选方法是可能引发异常的方法,或者是将请求发送到外部系统的方法
© www.soinside.com 2019 - 2024. All rights reserved.