如果Option包含特定值,则通常计算true



我想写一个方法,如果Option[Int]包含特定值,则返回true,否则返回false。做这件事的惯用方法是什么?

var trueIf5(intOption: Option[Int]): Boolean {
  intOption match {
    case Some(i) => i == 5
    case None => false
  }
}

上述解决方案显然有效,但Scala文档认为这种方法不太习惯。

有没有什么方法可以用mapfilter或其他东西做同样的事情?

我已经做到了这一点,但它只将问题更改为"如果Option包含true,则返回true",这实际上与"如果Option含有5,则返回true"相同。

var trueIf5(intOption: Option[Int]): Boolean {
  intOption.map(i => i == 5).???
}

由于您正在测试它是否包含值:

scala> Some(42) contains 42
res0: Boolean = true

不要忽视你的-Xlint:

scala> Option(42).contains("")
res0: Boolean = false
scala> :replay -Xlint
Replaying: Option(42).contains("")
<console>:12: warning: a type was inferred to be `Any`; this may indicate a programming error.
       Option(42).contains("")
                           ^
res0: Boolean = false

这些内置警告在普遍平等的情况下没有那么有效:

scala> Option(42).exists("" == _)    // no warning
res1: Boolean = false
intOption.exists(_ == 5)

文档

为什么没有人建议:

intOption == Some(5)

最新更新