scala中的全局try / catch实现

时间:2018-04-22 17:52:35

标签: scala try-catch

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

val result = myMethod {
  // your code
}

然后,您会根据失败的结果进行匹配,以便按照您的要求访问该例外。如果methodThatThrowsIOException上没有返回类型,那么您可以进一步简化并使用Option代替Try

答案 1 :(得分:0)

您可以实现更高阶的功能,以接收您需要的所有内容(一种模板模式)。像这样的东西

private def myMethod[T](block: => T, errorHandling: Throwable => Any) {
     Try(block()) match {
       case Success(s) => s
       case Failure(e) => errorHandling(e)
     }
   }