简化 Scala 中的 Option[Boolean] 表达式

Ava*_*Ava 5 boolean-logic scala optional scalastyle scala-option

我有这样的代码:

optionBoolean.getOrElse(false) && otherOptionBoolean.getOrElse(false)
Run Code Online (Sandbox Code Playgroud)

Scalastyle 告诉我它可以简化。如何?

Tom*_*tah 4

您可以尝试以下操作:

Seq(optionBoolean, otherOptionBoolean).forall(_.contains(true))
Run Code Online (Sandbox Code Playgroud)

在 Scala 2.13 中(与之前的版本非常相似)该forall方法位于IterableOnce,其实现是:

def forall(p: A => Boolean): Boolean = {
  var res = true
  val it = iterator
  while (res && it.hasNext) res = p(it.next())
  res
}
Run Code Online (Sandbox Code Playgroud)

因此,一旦有一个值不满足条件,循环就会中断,其余的将不会被测试。

代码在Scastie上运行。