Scala Option过滤方法存在疑问

gor*_*ral 3 scala filter option

我一直在阅读Scala文档,在浏览Option课程时,我看到了如下所示的filter实现:

final def filter(p: A => Boolean): Option[A] = 
  if (isEmpty || p(this.get)) this else None
Run Code Online (Sandbox Code Playgroud)

为什么我们要检查我们的Option实例是否为空?这不会导致这None两种方式吗?

Tra*_*own 6

||是短路的,因此isEmpty首先检查确保get不会在空选项上调用(这会抛出异常).