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
?
答案 0 :(得分:11)
暂时松开Try
:
def doWork = {
getLock()
val t = Try(useResource)
releaseLock()
t.get
}