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

And*_*ndy 2 resources scala resource-management

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

 private var ochan: Option[Channel] = None
Run Code Online (Sandbox Code Playgroud)

在程序执行期间的某个时刻,ochan设置为Some(channel).我想关闭通道(通过调用方法close)并将选项设置为None一个致命的猛扑.

目前我有:

 def disconnect = ochan = { ochan.foreach{_.close}; None }
Run Code Online (Sandbox Code Playgroud)

以前我曾经:

 def disconnect = ochan = ochan.flatMap{ o => o.close; None }
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

Jes*_*per 5

我写的是这样的:

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

而不是使用foreachflatMap.在我看来,这个解决方案更明确,更明确地显示了会发生什么.有foreachflatMap需要额外的心理跳跃的解决方案,你必须知道这些方法做什么Option.