gpt4 book ai didi

java - 使用 Either 处理失败 -> 堆栈跟踪在哪里?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:15:23 24 4
gpt4 key购买 nike

我从一些人那里听说,在 Scala 中,我们倾向于(像其他函数式语言一样)不破坏控制流......相反,按照惯例,我们在 Either Left< 中返回错误.

但是我们如何从该异常中获取 stracktrace 呢?现在,我在左侧返回一个简单的 Error 案例类,其中包含代码、消息和原因(还有 Error)。但如果我有错误,我无法获得堆栈跟踪。如果我的应用程序变得复杂,可能很难找到返回该 Error 的代码块...根本原因至关重要。


那么我们在实践中做什么呢?

我应该在 Left 中返回 java 类型 Exception 还是 Throwable 而不是自定义 Error ?在不丢失堆栈跟踪和原因等重要信息的情况下,Scala 异常处理的最佳实践是什么?

最佳答案

我建议使用 Either[java.lang.Throwable, A](Throwable 仍然允许您访问堆栈跟踪),并且(通常)制作您的自定义错误类型扩展 java.lang.Exception

这是Dispatch 0.9使用的做法,例如,其中 Either[Throwable, A] 用于表示可能失败的计算,自定义错误类型如下所示:

case class StatusCode(code: Int)
extends Exception("Unexpected response status: %d".format(code))

Scalaz 7Validation.fromTryCatch(a: => T)也返回一个Validation[Throwable, T],其中Validation大致等同于任一个

关于java - 使用 Either 处理失败 -> 堆栈跟踪在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12449950/

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