scala – 最后可以尝试Try吗?
发布时间:2020-12-16 18:13:22 所属栏目:安全 来源:网络整理
导读:参见英文答案 Simple Scala pattern for “using/try-with-resources” (Automatic Resource Management)????????????????????????????????????7个 我是Scala的新手,看了一下Try :: apply的源代码 def apply[T](r: = T): Try[T] = try Success(r) catch { ca
参见英文答案 >
Simple Scala pattern for “using/try-with-resources” (Automatic Resource Management)????????????????????????????????????7个
我是Scala的新手,看了一下Try :: apply的源代码 def apply[T](r: => T): Try[T] = try Success(r) catch { case NonFatal(e) => Failure(e) } 它只是捕获非致命异常.但是,如果我需要最终条款怎么办?是否可以通过尝试以功能方式模拟它?我的意思是 try{ //acquire lock //do some } finally { // release lock } 同 Try{ //acquire lock //do some } //Now how to release? 解决方法
由于Try解析为某个值并且在某些内容失败时它不会展开堆栈,因此您可以在执行Try之后执行清理操作.例如:
val someLock = ??? // acquire some lock val result = Try { // do something and return a result } someLock.release() 如果您愿意,可以使用自己的帮助程序将所有内容保存到单个表达式中: def withLock[A](f: Lock => A): Try[A] = { val lock = ??? // acquire the lock val res = f(lock) lock.release() } 然后你可以写: val res = withLock { lock => // some operation } 这通常被称为贷款模式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |