Я не понимаю, когда forAll имеет дело со значениями None.
def areTheyEqual(x: Option[String], y: String) = {
if (x.forall(_ == y)) {
true
} else {
false
}
}
Когда я вызываю функцию: areTheyEqual(None, "hello")
, это возвращает true, когда я ожидаю, что это будет false, поскольку они не равны. Пожалуйста помоги. Почему это так?
Редактировать:
Чтобы решить эту проблему, я изменил оператор if на: if (x.nonEmpty && x.forall(_ == y))
Но я все еще хочу знать, почему он возвращает true без условия x.nonEmpty
.
if (foo) true else false
избыточен, вы можете просто вернутьfoo
. - person Luis Miguel Mejía Suárez   schedule 17.07.2020forall
выглядит какfinal def forall(p: A => Boolean): Boolean = isEmpty || p(this.get)
. Таким образом, если он пуст и это в любом случае означает None, он вернет true, в противном случае будет проверен предикат. Из документации `/** Возвращает true, если эта опция пуста '''или''' предикат`* $p returns true when applied to this $option's value.
*
* This is equivalent to:
` * option match {` ` * case Some(x) =› p(x)`* case None => true
` * }`*/
- person user2963757   schedule 17.07.2020