我有一个资源对象存储在一个选项中。
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
}
而不是使用 foreach
或 flatMap
。在我看来,这个解决方案更清楚和明确地显示了会发生什么。使用 foreach
或 flatMap
的解决方案需要额外的思维跳跃,您必须知道这些方法对 Option
做了什么。
关于scala - 关闭存储在 Option[ ] 中的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5586809/