gpt4 book ai didi

java - 为什么 Scala Try 不捕获 java.lang.StackOverflowError?

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

我有一些函数可以(可能)产生 StackOverflowError。当然,这是糟糕设计的标志,但现在我决定将其包装到 Try 中。

Try{
Calculator.eval(..)
}

我期望的结果是Failure(java.lang.StackOverflowError)。我得到的结果只是 java.lang.StackOverflowError。我想问题是 StackOverflowError 不是异常,而是错误。如果是,是否有任何方法可以通过使用 Try 或其他一些 monad 来“捕获”这些类型的错误?

最佳答案

根据 Scala 文档。

Note: only non-fatal exceptions are caught by the combinators on Try (see scala.util.control.NonFatal). Serious system errors, on the other hand, will be thrown.

没有 Throwable -> ErrorsTry 捕获。

我会为你的情况实现一些允许处理错误的包装器:

object TryAll {
def apply[K](f: => K): Try[K] =
try {
Success(f)
} catch {
case e: Throwable => Failure(e)
}
}


TryAll {
Calculator.eval(..)
}

关于java - 为什么 Scala Try 不捕获 java.lang.StackOverflowError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38053222/

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