scala中的原始尝试/匹配处理

时间:2017-09-23 00:46:09

标签: scala

我写了以下一段代码

 def info(): MyCaseClass = {
   Try {
     val fileSys = new File("somePath")
     MyCaseClass(fileSys.getTotalSpace, fileSys.getUsableSpace)
   } match {
      case Failure(f) => {
      logger.error(s"Could not read information:${f.getStackTrace}")
      MyCaseClass(0, 0)
    }
  case Success(s) => s
 }
}

是否有更短的方法来处理文件系统操作可能导致异常的事实,所以我按上述方法处理它。我可以不仅仅是以某种方式处理失败案例。就像Future的例外情况一样,未来只会做它所拥有的,但仅对于例外我们定义recoverrecoverWith。这里有类似的东西吗?

3 个答案:

答案 0 :(得分:3)

只需使用try代替Try

def info(): MyCaseClass = {
  try {
    val fileSys = new File("somePath")
    MyCaseClass(fileSys.getTotalSpace, fileSys.getUsableSpace)
  } catch {
     case f: Throwable => {
       logger.error(s"Could not read information:${f.getStackTrace}")
       MyCaseClass(0, 0)
     }
  }
}

答案 1 :(得分:2)

Try也有recover

def info(): MyCaseClass = {
  (Try {
    val fileSys = new File("somePath")
    MyCaseClass(fileSys.getTotalSpace, fileSys.getUsableSpace)
  } recover {
    case f =>
      logger.error(s"Could not read information:${f.getStackTrace}")
      MyCaseClass(0, 0)
  }).get
}

答案 2 :(得分:0)

\.js$似乎正是您所寻找的:

.getOrElse