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)
有一个更好的方法吗?
我写的是这样的:
def disconnect = ochan = ochan match {
case Some(ch) => ch.close(); None
case None => None // do nothing
}
Run Code Online (Sandbox Code Playgroud)
而不是使用foreach或flatMap.在我看来,这个解决方案更明确,更明确地显示了会发生什么.有foreach或flatMap需要额外的心理跳跃的解决方案,你必须知道这些方法做什么Option.