def doWork() = {
getLock()
Try(useResource) match {
case Success(result) => releaseLock(); result
case Failure(e: Exception) => releaseLock(); throw e
}
}
Run Code Online (Sandbox Code Playgroud)
当我退出时,我正在努力确保锁定被释放doWork
.但是作为该方法的一部分,我可能会抛出一个异常,所以我不能在最后释放锁doWork
.
releaseLock()
重复两次,看起来有点代码味道.我可以通过使用传统的Java风格的try/catch/finally来减少它:
def doWork() = {
getLock()
try {
useResource
} catch {
case e: Exception => throw e
} finally {
releaseLock()
}
}
Run Code Online (Sandbox Code Playgroud)
但Try
如果可能的话,我更喜欢使用Scala .
有没有办法在框架内执行"最终"逻辑Try
?
Sea*_*ean 13
只是Try
暂时松鼠离开:
def doWork = {
getLock()
val t = Try(useResource)
releaseLock()
t.get
}
Run Code Online (Sandbox Code Playgroud)