加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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
}

这通常被称为贷款模式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读