我有一些函数可以(可能)产生StackOverflowError.当然这是一个糟糕设计的标志,但是现在我决定将它包装到Try中.
Try{
Calculator.eval(..)
}
Run Code Online (Sandbox Code Playgroud)
我期望的结果是Failure(java.lang.StackOverflowError).我得到的结果只是java.lang.StackOverflowError.我想问题是StackOverflowError不是Exception,而是一个错误.如果是,有没有办法通过使用Try或其他monad来"捕获"那些错误?
vvg*_*vvg 10
根据Scala文档.
注意:Try上的组合器只捕获非致命异常(请参阅scala.util.control.NonFatal).另一方面,将抛出严重的系统错误.
没有人Throwable -> Errors被抓住Try.
我会实现一些允许处理Errors你的情况的包装器:
object TryAll {
def apply[K](f: => K): Try[K] =
try {
Success(f)
} catch {
case e: Throwable => Failure(e)
}
}
TryAll {
Calculator.eval(..)
}
Run Code Online (Sandbox Code Playgroud)