最后相当于Scala Try

时间:2015-11-12 22:21:51

标签: scala

def doWork() = {
  getLock()
  Try(useResource) match {
    case Success(result) => releaseLock(); result
    case Failure(e: Exception) => releaseLock(); throw e
  }
}

当我退出doWork时,我正试图确保锁定被释放。但是作为该方法的一部分,我可能会抛出异常,所以我不能在doWork的末尾释放锁。

releaseLock()重复两次看起来有点代码味道。我可以通过使用传统的Java风格的try / catch / finally来减少它:

def doWork() = {
  getLock()
  try {
    useResource
  } catch {
    case e: Exception => throw e
  } finally {
    releaseLock()
  }
}

但如果可能的话,我更喜欢使用Scala的Try

有没有办法在Try

的框架内执行“最终”逻辑

1 个答案:

答案 0 :(得分:11)

暂时松开Try

def doWork = {
  getLock()
  val t = Try(useResource)
  releaseLock()
  t.get
}