scala - 关闭存储在 Option[ ] 中的资源

标签 scala resources resource-management

我有一个资源对象存储在一个选项中。

 private var ochan: Option[Channel] = None

在程序执行期间的某个时刻,ochan 被设置为 Some(channel)。我想关闭 channel (通过调用方法 close)并将选项设置为 None 一口气。

目前我有:

 def disconnect = ochan = { ochan.foreach{_.close}; None }

之前我有:

 def disconnect = ochan = ochan.flatMap{ o => o.close; None }

有更好的方法吗?

最佳答案

我会这样写:

def disconnect = ochan = ochan match {
  case Some(ch) => ch.close(); None
  case None => None // do nothing
}

而不是使用 foreachflatMap。在我看来,这个解决方案更清楚和明确地显示了会发生什么。使用 foreachflatMap 的解决方案需要额外的思维跳跃,您必须知道这些方法对 Option 做了什么。

关于scala - 关闭存储在 Option[ ] 中的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5586809/

相关文章:

scala - Scala 3 中是否仍然存在 volatile 类型?

linux - Ubuntu Linux 的资源跟踪库?

java - 如何从非 Activity 或 fragment 类的资源文件中获取字符串

c++ - 这是管理 COM 初始化的好方法吗?

c# - 不会被释放的静态变量

Scala 的图标没有出现在 IntelliJ Idea 12 中

scala - 在按名称参数 : evaluation is not forced? 中传递的函数上使用 apply ("()")

mysql - 是否可以使用 Anorm 在带有 VARCHAR PK 的表中插入记录?

java - 为什么在 Wildfly 12 中注入(inject) @Resource 需要 "java:/"前缀?

f# - 在序列表达式中使用 "use"时的资源管理