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
?
只是松鼠Try
暂时离开:
def doWork = {
getLock()
val t = Try(useResource)
releaseLock()
t.get
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)