scala中的全局try / catch实现

问题描述 投票:0回答:2

我正在尝试为我的所有方法寻找Global try / catch方法来处理异常并返回相同的异常。

private def myMethod() {
     try {
       methodThatThrowsIOException() 
     } catch (IOException e) {
       //What to do?   
     }
   }

所以,而不是在每个方法中单独调用try catch,我可以设计一个公共方法来处理scala中我所有其他方法的try / catch异常。在这里我需要使myMethod()通用并传递任何methodThatThrowsIOException()

scala try-catch
2个回答
1
投票

当将块传递给函数时,特别是当该函数随后在具有不同输入的地方使用时,我倾向于将它分成它自己的参数列表:

private def myMethod[T](block: => T): Try[T] = {
    Try(block())
}

这通常更容易阅读,例如:

val result = myMethod {
  // your code
}

然后,您将匹配失败的结果,以便按照您的要求访问异常。如果在methodThatThrowsIOException上永远不会有返回类型,那么你可以进一步简化并使用Option而不是Try


0
投票

你可以实现一个更高阶的函数来接收你需要的所有东西(一种模板模式)。像这样的东西

private def myMethod[T](block: => T, errorHandling: Throwable => Any) {
     Try(block()) match {
       case Success(s) => s
       case Failure(e) => errorHandling(e)
     }
   }
© www.soinside.com 2019 - 2024. All rights reserved.