最后等效于 Scala 尝试 [英] Finally equivalent in Scala Try

查看:39
本文介绍了最后等效于 Scala 尝试的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

当我退出 doWork 时,我试图以惯用的方式确保释放锁.然而,作为该方法的一部分,我可能会抛出异常,所以我不能在 doWork 结束时释放锁.

I'm trying to idiomatically make sure a lock is released when I exit doWork. However as part of that method I may throw an exception, so I can't just release the lock at the end of doWork.

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

It looks like a bit of code smell to have releaseLock() repeated twice. I could cut that down by using the traditional Java-style try/catch/finally:

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

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

But I prefer to use Scala's Try if possible.

有没有办法在Try的框架内执行finally"逻辑?

Is there a way to perform "finally" logic from within the framework of Try?

推荐答案

暂时将 Try 放在一边:

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

这篇关于最后等效于 Scala 尝试的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆